你好
措美網站建設公司成都創新互聯,措美網站設計制作,有大型網站制作公司豐富經驗。已為措美近千家提供企業網站建設服務。企業網站搭建\外貿營銷網站建設要多少錢,請找那個售后服務好的措美做網站的公司定做!
從問題來看,似乎你對于指針的概念沒太理解。指針變量中存儲的是內存中的地址,而實際的數據放在這個地址中。
按照這段代碼來說,int* 聲明的指針指向內存中的一塊地址,而在這塊地址中存儲著一個整形數值。所以要返回這樣的值,也就相當于是返回一個內存地址。因此,在程序中有兩種具體的解決辦法:
1.在調用函數的時候,直接將變量的指針(即內存地址)作為參數傳入,在函數執行的時候,就會自動對內存中相應地址的數據進行操作。使用這種方法也就不需要返回值了。具體到這段代碼中,就是在Main中聲明int* tempA[10],把foo函數聲明為void foo(int* a[10]),調用時用foo(tempA),在foo函數中直接使用a[10]即可。
2.直接把內存地址作為返回值,因為在C中,數組名就是數組首元素的指針,因此直接返回數組名就可以了,即return a即可。如果是普通變量,要用取內存地址的運算符,比如聲明了整型變量 int i,就可以return i。這與printf函數中的使用方法是相通的。
【按照補充的內容:】
a--------a1--------i1
|--------a2--------i2
|……………………
|--------an--------im
這樣的調用方法,只能保證a1-an不被修改,怎么保證i1-im不被修改?
希望以上回答能幫到你。【PS.很久沒用C了,如果哪里出了差錯,請指正。】
首先,說一下第一個問題,第一個不交換是因為定義的k是一個指針,指針說白了就是一個指向,我指向你,他指向她,然后換成我指向她,他指向你,你把他們指向的位置交換,而并沒有交換他們地址里面存儲的值,這樣是并沒有任何區別,在最后函數結束之后,函數的那些指針指向全部釋放,和修改不修改沒什么兩樣;定義的是一個整型變量,他把s
指針指向的地址里面的值與
t
指針指向的地址的值進行了交換,這樣就修改了內存里面的值,即便是函數結束了也不會釋放,自然就能做到交換了。
第二個問題,存儲地址是會釋放,但是釋放的是函數內部定義的局部變量,現在你已經把s的地址通過return
返回回來并且存在
主函數的
r
中了,所以自然就不會釋放了
這是個函數指針 前面的void為返回值類型 后面的void*為參數類型.
函數指針是可以作為某個函數的參數的.
(1) 指向函數的指針變量的一般定義形式為:
數據類型 (*指針變量名)(函數參數列表)
函數名是可以缺省的 作為參數傳遞的時候會去調和 void*(*)(void*)這個類型相匹配的函數的
作為參數調用這個函數的時候 返回類型是void* 就相當于傳了一個參數類型為void*,當然這個函數指針的參數也是void*的
這種方式叫做“用指針函數*creat()的返回值來傳遞動態內存”,這是一個C語法
首先你要注意,子函數*creat()用了malloc動態申請內存,而return返回的是指針變量所指向的地址,而不是指針!相當于將你所申請的動態內存返回給主函數
int
*fun(void)//這里是指針函數
{
int
*p
=
(int
*)
malloc
(int);//動態申請內存//p在這里指向了一塊合法內存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指針p所指向的地址,(指針p是在棧上創建的,所以*fun()函數運行完,指針所分配的內存被系統自動釋放)這時q指向p,得到了malloc所申請到的內存
free(q);//釋放動態內存
}
不知下列代碼對你是否有用
記住:C中只有_值_傳遞!
#include conio.h
#include stdio.h
void fun(int **pp, int *i);
int main(void)
{
int *p, i;
i = 88;
fun(p, i);
printf("%d\n", *p);
getch();
return 0;
}
void fun(int **pp, int *i)
{
*pp = i;
}
或者
#include conio.h
#include stdio.h
#include stdlib.h
#define N 100
void getmemory(int **pp, int n);
int main(void)
{
int *p, i;
getmemory(p, N);
for (i = 0; i N; i++)
p[i] = i;
for (i = 0; i N; i++)
(i+1)%10 ? printf("%3d", p[i]) : printf("%3d\n", p[i]); /*輸出0~99*/
getch();
return 0;
}
void getmemory(int **pp, int n)
{
*pp = (int *)malloc(n * sizeof(int));
}
本文名稱:c語言函數參數傳回指針 c語言 指針傳參
網站網址:http://vcdvsql.cn/article2/hepcic.html
成都網站建設公司_創新互聯,為您提供軟件開發、網站維護、外貿建站、移動網站建設、外貿網站建設、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯