C語言指標作為函式引數傳遞學習(一)
阿新 • • 發佈:2018-12-09
1. 一維指標做函式引數
傳入的指標為NULL
比如下面的例子,很多人都會理解錯:
#include <stdio.h>
void test(char *string)
{
string = "hello world";
}
int main()
{
char *str = NULL;
test(str);
printf("str=%s\n",str);
return 0;
}
是不是覺得輸出應該是:str=hello world.事實上並不是
輸出結果是(作業系統:win10):
具體過程如下:
開始str指標指向NULL,並將該地址作為形參傳入函式test(),最開始string指標也是指向NULL,接著講“hello world”地址傳給了string,此時string的指標不再指向NULL,而是指向“hello world”這個字串的地址。為了驗證這個,可以在程式碼里加一些列印資訊驗證:
#include <stdio.h>
void test(char *string)
{
printf("string未操作之前的的指標:%p\n",string);
string = "hello world";
printf("string未操作之後的的指標:%p\n",string);
}
int main()
{
char *str = NULL;
printf("傳入test函式之前str的指標:%p\n",str);
test(str);
printf("str=%s\n",str);
getchar();
return 0;
}
結果:
2.那要實現在test函式中改變str的指標指向地址怎麼辦?
2.1 返回string指標,這個很好理解
#include <stdio.h>
char *test(char *string)
{
string = "hello world";
return string;
}
int main()
{
char *str = NULL;
str = test(str);
printf("str=%s\n",str);
getchar();
return 0;
}
結果:
2.2 用二維指標
#include <stdio.h> void test(char **string) { *string = "hello world"; } int main() { char *str = NULL; test(&str); printf("str=%s\n",str); getchar(); return 0; }
結果:
具體分析如下圖:
過程:
1.定義一個字串指標str,str本身的地址是100,值為0(即NULL,一般的編譯器NULL的地址是0)。
2.取str的地址100傳給string,此時string的值是100,地址為200
3.這裡假設“hello world”字串的地址是300,接下來就是改變一級指標指向的內容的地址,由0變成300。