❶ C語言函數返回指針
第二種方法,跟第一種只是參數和返回值不同而已。
初看時需要在第二種中申請內存返回出來,但是字元串為局部變數時其實也是存在靜態內存中的,不會因為函數退出而失效,直接將函數內拼裝的字元串返回出來也是可以的,你也可以加上static定義什麼的也沒問題。
❷ C語言,用返回值為指針的函數解決
搞定
額 , 現在可以直接用b , 因為 數組 變數b 本身是不能修改的, 而且 函數結束後 b 的生命就結束了。
所以 我在 b的前面 加了static
for(i=r;*(ch+i)!='\0';i++) //找到 目標函數的結尾
for(j=0;j<=i-r+1;j++) // i-r 是 從m到最後字元串的長度
*(b+j)=*(ch+r-1+j); //拷貝
char * x= b;
return x;
復制以下的
#include<stdio.h>
void main()
{
char a[20];int m=0;char*fu(char*,int);
printf("輸入字元:");
gets(a);
printf("輸入起始位數:");
scanf("%d",&m);
printf("%s\n",fu(a,m));
}
char *fu(char*ch,int r)
{static char b[20];int i,j;
for(i=r;*(ch+i)!='\0';i++)
for(j=0;j<=i-r+1;j++)
*(b+j)=*(ch+r-1+j);
char * x= b;
return x;
}
❸ C語言如何聲明一個返回函數指針的函數
C語言指向函數的指針承載的信息比較復雜,組織起來要素要寫全。根據指向函數的指針的書寫語法,下面的代碼就是一個返回函數指針的函數:
int (*f(void))(int){//f是函數,沒有參數,返回指向一個函數的指針;這個被指向的函數有一個int型形參,且返回一個int值
return fun;//fun是個函數名,必須具備一個int形參、返回int值的要求
}
以下代碼可以驗證上述函數的正確性:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intfun(intn){
printf("abcdef ");
returnn;
}
int(*f(void))(int){
returnfun;
}
intmain(void){
printf("%d ",f()(100));//調用函數f,通過f返回的指針用100調用函數fun
return0;
}
輸出是:
abcdef
100
❹ C語言指針與返回值
函數A的返回值錯誤。雖然地址和指針很像,但還是不同的兩個東西。而且,一旦出了函數A,返回的地址,也就該被回收,會導致程序出錯。是非常危險的行為。
舉個例子說明下吧。
int *p=a;
這個,在數值上,p是和a的地址相等的,也就是有p==&a。
這時如果a=1;那麼你知道*p==1,是真。
但是此時,p存儲的是a的地址,p還有自己本身的地址。就好比,你(p)坐在座位上,用手指向另一個座位(&a)一樣。那個座位就是a的地址,上面坐著誰(1),就是a的值。你本身就是指針了。
所以說,返回值是指針和地址是完全不同的兩個概念。所以就是錯誤的!
B函數為啥正確呢?因為NULL是一種特殊的指針,叫空指針。所以是可以算作正確的。
❺ C語言返回結構指針的函數
#include"stdafx.h"
#include"string.h"
structstudent
{
intnum;
charname[20];
charsex;
};
structstudent*fun(structstudentstu)
{
structstudent*p;
stu.num=10;
strcpy_s(stu.name,"abc");
stu.sex='G';
p=&stu;
returnp;
}
intmain()
{
structstudentstu1,*pp;
stu1.num=10;
strcpy_s(stu1.name,"def");
stu1.sex='M';
printf("num=%dname=%ssex=%c ",stu1.num,stu1.name,stu1.sex);
pp=fun(stu1);
printf("num=%dname=%ssex=%c ",(*pp).num,(*pp).name,(*pp).sex);//name輸出亂碼,求解釋
return0;
}
❻ C語言函數的返回值為指針時的問題
week_day作為lookstr()的參數,經過函數lookstr()提取之後,return(table[day]),得到一個靜態字元串的指針;輸入數字有誤情況下return(NULL)。
❼ C語言指針作函數參數時的返回問題
首先,弄懂函數參數都是靠值傳遞。指針也是。
進入函數後,函數創建幾個空間給形參,再把實參數值拷過來。退出函數時,把形參空間釋放,則影響不到實參。這就是值傳遞。
swap(int *p1,int *p2)函數首先創建兩個空間,是指針,再把實參復制過來,即p1=pointer_1=&a,p2=pointer_2=&b,改變p1,p2就分別指向了a,b.改變p1指向的值就是改變了a。然後交換*p1,*p2,ab就互換了。函數退出,釋放p1,p2所佔的內存空間。但是a,b值互換了。swap函數沒有改變實參pointer_1,pointer_2的內容,只是藉助指針實現了巧妙的乾坤大挪移。
學到c++後有個引用例外,那是後話了。
++++++++++++++++++++++華麗麗的分割線+++++++++++++++++++++
其實很簡單,不要硬記規律,要理解了。
第二個例子中swap(int x,int y)沒有改變原來實參a,b的值
第一個例子中swap(int *p1,int *p2)也沒有改變原來兩個實參pointer_1,pointer_2的值,他們值分別是是a,b地址,但pointer_1,2指向的內容改變了,改的是以pointer_1,pointer_2的值為地址的內存單元的值。
❽ C語言 函數返回指針
首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然後換成我指向她,他指向你,你把他們指向的位置交換,而並沒有交換他們地址裡面存儲的值,這樣是並沒有任何區別,在最後函數結束之後,函數的那些指針指向全部釋放,和修改不修改沒什麼兩樣;定義的是一個整型變數,他把s
指針指向的地址裡面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內存裡面的值,即便是函數結束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數內部定義的局部變數,現在你已經把s的地址通過return
返回回來並且存在
主函數的
r
中了,所以自然就不會釋放了
❾ C語言 帶指針的函數 如何讓它return指針
把a作為參數傳指針進函數里。另外a在函數外分配內存並釋放,不要在函數里分配。遵循誰分配,誰釋放的原則。
❿ C語言里返回函數的指針
#include <stdio.h>
void main()
{
int *func(int pt,int pt2);
int a;
int b;
int *p2;/*我把這一句放這編譯器才不出錯*/
scanf("%d%d",&a,&b);
p2=func(a,b);
printf("%d",*p2);
}
int *func(int pt,int pt2)
{
if(pt<pt2)
return &pt2;
return &pt;/*加了這一句*/
}