-4

说我有这个代码:

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

编写函数 f 以便第 3 行打印 0。

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

谢谢!

4

2 回答 2

0

更正您的问题

  1. 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(),但您要修改的地址处的值已被修改。

于 2013-07-17T11:26:49.470 回答
-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;
}
于 2013-07-17T11:15:33.117 回答