更改内部功能的原始指针

时间:2013-07-17 11:12:41

标签: c pointers

说我有这段代码:

int * p = 7;
f(p);
printf(p);

写入函数f,使第3行打印为0。

我想说p = 0,但我不认为函数内的地址与更广泛范围内的地址相同,所以只想得到一些了解这一点的人的帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

您的问题中的更正

  1. int *p是指向整数的指针,因此您无法为其指定数字。
  2. 如果我理解你的问题是正确的,你需要在函数内改变指针的值。

    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;
}