日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数参数的值传递和地址传递

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数参数的值传递和地址传递 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用一個小例子說明,見代碼。

#include<stdio.h> void F1(int *pp) {pp++;*pp = 9; }void F2(int **pp) {(*pp)++; } //以上函數中,接收數據的參量都是pp,而不會是*pp或者**ppint* F3(int *pp) {pp++;return pp; }int main(void) {int *p;int a[2] = { 4,5 };p = a;printf("1--------%d\n", *p);//開始值為4F1(p);printf("2--------%d\n", *p);//4//由于只是傳值,在子函數F1的內部改變復制品的值,并不會改變原品p的值//可以理解為用兩個變量指向同一個地址,即形參pp和實參p指向同一個地址//其中形參pp++,另外一個實參p并不會受影響//但是可以修改指針所指的值,如F1代碼中將a[1]的值改為9;printf("2`-------%d\n", a[1]);//9F2(&p);printf("3--------%d\n", *p);//9//傳址,pp=&p(指針的地址,即pp是指向指針的指針),*pp=*(&p)=p;//如果要修改指針p,則應該傳入指針p的地址(&p),此時進行*pp++操作,其實是對實參指針p進行操作getchar(); getchar();return 0; }//這個例子說明:如果要在子函數中修改主函數傳過來的指針的指向,那么主函數應該向子函數傳入指針的地址(而非指針本身); //此時在子函數中進行*操作后可以獲得原來指針,而不是原來指針的復制品,之后可以根據需要修改指針。 //或者,將返回值類型改為指針類型,然后返回修改后的指針,給原來主函數的指針,如F3函數,此時在主函數中需要添加p=F3(p)代碼。

#include <stdio.h> #include <stdlib.h> #include<string.h> /*void getmemory(char **p) {*p = (char *)malloc(100);strcpy(*p, "helloworld");//return p; } int main() {char* str = NULL;getmemory(&str);printf("%s", str);free(str);getchar();return 0; }*/char* getmemory(char *p) {p = (char *)malloc(100);strcpy(p, "helloworld");return p; } int main() {char* str = NULL;str = getmemory(str);printf("%s", str);free(str);getchar();return 0; }

總結

以上是生活随笔為你收集整理的函数参数的值传递和地址传递的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。