用C語言編寫不同的函式,函式返回的值是不一樣的。下面是小編為大家帶來的關於C語言函式返回值解析的知識,歡迎閱讀。
程式一:
int main()
{
int *p;
int i;
int*fun(void);
p=fun();
for(i=0;i<3;i++)
{
printf("%d",*p);
p++;
}
return 0;
};
int* fun(void)
{
static int str[]={1,2,3,4,5};
int*q=str;
return q;
}
//不能正確返回
雖然str是在動態變數區,而該動態變數是區域性的,函式結束時不保留的。
程式二:
int main()
{
char *p;
char*fun(void);
p=fun();
printf("%s",p);
return 0;
};
char * fun(void)
{
char *str="hello";
return str;
}
//可以正確返回
但是,字串"hello"不是變數,而是一個常量,編譯程式在處理這種常量時,通常把它放在了常量區中。而常量區則是始終存在的。
後一個例子中函式fun的返回值就是一個指向這種常量區的指標。
函式返回指標,要使主程式可以使用這個指標來訪問有意義的資料,關鍵就是要保證在使用這個指標值的時候,該指標所指向的地方的資料仍然有意義。
還有,如果指標是指向函式的指標,那麼這個指標就是指向程式程式碼區的。這也是一種應用的情況。
另外,如果明白了它的原理,程式設計師還可以發明出一些其他靈活的使用方法,當然,那都屬於“怪”方法,一般不提倡的。
程式三:
int main()
{
int a,b;
int max;
int fun (int a,int b);
scanf("%d%d",&a,&b);
max=fun (a,b);
printf("%d",max);
return 0;
};
//
int fun(int a,int b)
{
int max;
if(a>b)
max=a;
else
max=b;
return max;
}
//可以正確返回
程式三:
這個例子中,返回的不是變數max的地址,返回的是它的值。
return後面的東西,看做一個表示式,返回的是這個表示式的值。
例如,入口如果a是3,b是5,則此時(執行return語句時)max裡面存的是5。而return語句的功能就是把max裡面的5取出來,放到“返回值暫存器”中。
主程式是從“返回值暫存器”得到這個5的(此時max變數已經不存在了)。
你前面的第二個例子中,同樣,指標變數str在函式結束後已經不存在了。但是在return語句中,把指標變數str裡面的值(等於字串"hello"存放處的地址)送到“返回值暫存器”中了。
動態變數str不存在了,但常量區中的字串"hello"還存在。主程式根據返回的地址就可以找到該字串。
程式四:
int main()
{
char *p;
char *fun(void);
p=fun();
printf("%x",p);
printf("%s",p);
return 0;
}
char* fun(void)
{
// char str[]={'a','b','c','d','e','f','