V.T*_*am. 0 c pointers arguments function memory-address
我写了一些代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是指针'地址'指向a + 4地址处的内存块.但结果是指针"地址"仍指向NULL(屏幕上的打印结果类似于'00000000').但是,当我开始调试时,在'a_function'中,'returned_address'确实指向了+ 4的内存块.我错过了什么?
在c中,参数按值传递.将指针传递给函数时,其地址将复制到函数参数中.只有对指针所指向的位置内容的修改才会被调用者看到.这意味着该参数returned_address可以指向其他位置.
因此,returned_address=a+a_length-1;使得returned_address指向一个新的位置,即,其内容是由新的任务留给传递指针改写address指向NULL.
你可以通过使用指针指针来解决这个问题.
void a_function(int *a, int a_length, int **returned_address)
{
*returned_address=a+a_length-1;
}
Run Code Online (Sandbox Code Playgroud)
并称之为
a_function(a, n, &address);
Run Code Online (Sandbox Code Playgroud)