函数参数的值传递和地址传递
生活随笔
收集整理的這篇文章主要介紹了
函数参数的值传递和地址传递
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
利用一個小例子說明,見代碼。
#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; }
總結
以上是生活随笔為你收集整理的函数参数的值传递和地址传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java内嵌html5浏览器_Jcef内
- 下一篇: idea快捷键最全最新最好