【发布时间】:2015-03-09 14:28:09
【问题描述】:
我写了一些代码:
#include <stdlib.h>
#include <stdio.h>
int a_function(int *a, int a_length, int *returned_address)
{
returned_address=a+a_length-1;
return 0;
}
int main(void)
{
int n=5;
int *a;
int *address=NULL;
a=(int*)malloc(n*sizeof(*a));
a_function(a,n,address);
printf("%p",address);
return 0;
}
预期的结果是指针'address'指向地址为a+4的内存块。但是结果是指针'address'仍然指向NULL(屏幕上的打印结果就像'00000000')。但是,当我开始调试时,在“a_function”内部,“returned_address”确实指向 a+4 处的内存块。我错过了什么?
【问题讨论】:
-
标准警告:请do not cast
malloc()和family的返回值。 -
@SouravGhosh 好的,谢谢。
-
如果您想从函数内部更改调用函数中存储在指针变量中的值,您必须将指针传递给指向被调用函数的指针。因此,您需要
int **returned_address作为第三个参数,&address作为调用的第三个参数。 -
@JonathanLeffler 我现在得到你的答复,谢谢。
标签: c function pointers arguments memory-address