-1

我刚刚开始使用 c 中的指针。该程序提供了所需的输出,但我在编译时收到以下警告,我做错了什么?

pointer.c:3: warning: initialization makes pointer from integer without a cast 

pointer.c:5: warning: incompatible implicit declaration of built-in function ‘printf’

pointer.c:8: warning: assignment from incompatible pointer type

pointer.c:12: warning: assignment makes pointer from integer without a cast

我的代码是:

int main (int argc, char *argv[])
 {
  int *x=2, *ampx, *starampx, starx;

  printf("x=");
  printf("%d\n",x);

  ampx=&x;
  printf("&x=");
  printf("%d\n",&x);

  starampx=*ampx;
  printf("*&x=");
  printf("%d\n",starampx);

  return 0;
  }
4

3 回答 3

4
 int *x=2

实际上导致您的程序具有未定义的行为。它告诉编译器指向一个地址2,该地址可能有效也可能无效,并且引用指针将导致未定义的行为。
每当您使用指针时,您需要使指针指向一个足够大的有效内存以存储 a int,然后才能存储任何内容。所以你要么需要:

int i = 2;
int *x = &i;

或者您只需使用:

int x = 2;

考虑到您稍后在程序中如何使用x后者是您所需要的。

您需要包含stdio.hwhich 告诉编译器这printf是一个标准的 c 库函数。

于 2013-03-17T11:49:56.457 回答
4
于 2013-03-17T11:53:12.860 回答
3

在您的代码中,在此语句中,您遇到了问题。

int *x=2, *ampx, *starampx, starx;
     ^           ^
     |           |

*x是一个指针。要存储 的值2,您需要为其分配空间。而不是当前的实现,请尝试

int x=2, *ampx, starampx, starx;
于 2013-03-17T11:51:36.440 回答