题目:在子函数内修改主函数的一级指针变量
错误代码:
#include <stdio.h>
void change_pointer(int *a,int *b){
a=b;
}
int main(){
int *p=NULL;
int i=10;
int *q=&i;
change_pointer(p,q);
printf("change_pointer *p=%d\n",*p);
return 0;
}
解析:
此函数原本的题意是为了修改p的值,使其变为i的地址,但是最终并不成功
(最终结果会报错,报错原因是p的值未修改仍然为0,而地址为0的地方无法被访问)
未成功修改原因如下图
如图可见,p中的值未发生改变,仍然为0,所以未修改成功。
正确代码:
#include <stdio.h>
void change_pointer(int **a, int *b) {
*a = b;
}
int main() {
int *p = NULL;
int i = 10;
int *q = &i;
change_pointer(&p, q);
printf("change_pointer *p = %d\n", *p);
return 0;
}
图解如下
故成功修改。
个人理解,若有不对,欢迎评论区指正!