我們想在函數pro()中改變指針p的值(記住:是指針p的值,而不是p所指向的地址的值)。能實現嗎?結果是不能,爲什麼?我們來分析一下
先看一個例子:
#include <stdio.h>
char buf[10] = "hello";
void pro(char *out)
{
out = buf;
}
main()
{
char *p = NULL;
pro(p);
printf("%s/n", p);
}
我們想在函數pro()中改變指針p的值(記住:是指針p的值,而不是p所指向的地址的值)。能實現嗎?
結果是不能,爲什麼?我們來分析一下。
如果不用函數pro(),我們可以直接在主函數中用 p = buf 來實現。如果使用函數pro(),就變得稍微複雜了。
因爲我們要在函數pro()中改變指針p的值,而函數pro()又沒有返回值,如何記住這個改變呢?
我們可以先用簡單的例子說明:
#include <stdio.h>
void pro(char *out)
{
out[1] = 'o';
}
main()
{
char *p = "hello";
pro(p);
printf("%s/n", p);
}
這個例子是改變了字符串指針p所指向的字符串的指,它能記住這個改變是因爲在函數中是對指針所指向的地址空間進行操作。你明白了嗎?也就是說,函數的參數是char *out,我們可以改變 *out,但改變不了out本身。
所以針對第一個例子,我們要想改變p,必須把&p當作參數傳給函數pro()。修改後的例子如下:
#include <stdio.h>
char buf[10] = "hello";
void pro(char **out)
{
*out = buf;
}
main()
{
char *p = NULL;
pro(&p);
printf("%s/n", p);
}