说我有这段代码:
int * p = 7;
f(p);
printf(p);
写入函数f,使第3行打印为0。
我想说p = 0,但我不认为函数内的地址与更广泛范围内的地址相同,所以只想得到一些了解这一点的人的帮助。
谢谢!
答案 0 :(得分: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()
退出您要修改的地址后的值时会丢失其范围。
答案 1 :(得分:-1)
通常人们不希望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;
}