说我有这个代码:
int * p = 7;
f(p);
printf(p);
编写函数 f 以便第 3 行打印 0。
我只想说 p=0 但我不认为函数内部的地址与更广泛范围内的地址相同,所以只是想从了解这一点的人那里得到一点帮助。
谢谢!
更正您的问题
int *p
是一个指向整数的指针,所以你不能给它分配一个数字。如果我理解您的问题是正确的,您需要在函数中更改指针的值。
void function (int *p)
{
int i = 0;
if(NULL == p)
{
printf("Input argument is NULL");
return;
}
/* Change the value of the pointer */
*p = i;
}
您可以按如下方式调用此函数:
int main()
{
int i = 3;
function (&i);
printf("i=%d\n",i);
return 0;
}
代码说明:
当您将指针传递给函数时,实际上会创建指针变量的副本,该副本又指向与原始指针相同的地址。尽管指针副本在退出后会失去其范围function()
,但您要修改的地址处的值已被修改。
通常人们不希望7
作为指针值,所以很可能你想要的变量是int num = 7;
void f(int* pNum) {
*pNum = 0;
}
int main() {
int num = 7;
f(&num);
printf("%d",num);
return 0;
}
但是如果您想与现有代码具有相同的语法,那么
void f(int * p) {
strcpy(p,"0");
}
int main() {
int * p = malloc(2); // let's change to valid address
f(p);
printf(p);
return 0;
}