C語言函式不能返回區域性變數的位址

2021-06-06 23:11:49 字數 1217 閱讀 8567

在c中,正常情況下,我們只能從函式中返回乙個值。但在很多情況下,我們需要從函式中返回多個值,此時使用陣列或指標能夠很好地完成這樣的任務。這裡是乙個示例。這個程式使用乙個整型陣列作為引數,並將陣列元素的和與積返回給呼叫函式。下面是c**,這是一種常見情況。下面給出實現技巧:

#include<

stdio.h

>

#include<

conio.h

>

int* pool(int array,int size)  

;  for(i

=0;i<

size

;i++)  

//將陣列的基位址賦值給整型指標  

x=&a[0];  

//返回整個陣列  

return x;  

}  int main()  

;  int *c; c

= pool

(a,4);  

printf("sum

= %d\nproduct

= %d\n",c[0],c[1]);  

getch();  

return 0;  

}

這樣,你已經學會了如何使用陣列和指標從c函式中返回多個值。在很多情況下你會發現這個技巧很有用。

其實上面的用法是有問題的,在c語言中絕不能返回函式內區域性變數的位址。

在c語言中,一種典型的錯誤就是將乙個指向區域性變數的指標作為函式的返回值。由於該陣列是區域性變數,因此在函式返回時其陣列空間已經作廢了,即指標應用一塊無意義的位址空間,所以不會有返回值。

如果得到正常的值,只能是幸運的

退出函式的時候,系統只是修改了棧頂的指標,並沒有清記憶體;

所以,是有可能正常訪問到區域性變數的記憶體的。

但因為棧是系統自動管理的,所以該記憶體可能會被分配給其他函式,這樣,該記憶體的內容就會被覆蓋;不再是原來的值了。

int main()  

;  int *c; c

= pool

(a,4);  

pool(a,3);  //增加這句

printf("sum

= %d\nproduct

= %d\n",c[0],c[1]);  

getch();  

return 0;  } 

得到的結果跟上面就不一樣了

C語言函式不能返回區域性變數的位址

在c中,正常情況下,我們只能從函式中返回乙個值。但在很多情況下,我們需要從函式中返回多個值,此時使用陣列或指標能夠很好地完成這樣的任務。這裡是乙個示例。這個程式使用乙個整型陣列作為引數,並將陣列元素的和與積返回給呼叫函式。下面是c 這是一種常見情況。下面給出實現技巧 include stdio.h ...

C語言 返回區域性變數

一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...

C 函式返回區域性變數

原因 返回值是拷貝值,區域性變數的作用域為函式內部,函式執行結束,棧上的區域性變數會銷毀,記憶體釋放。可返回的區域性變數 1.返回區域性變數本身 int sum int a,int b 2.常量 char returnvalue warning deprecatedconversion from s...