C中非常基本的指针程序中的警告

时间:2013-03-17 11:47:32

标签: c pointers warnings

我刚开始用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;
  }

3 个答案:

答案 0 :(得分:4)

 int *x=2

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

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

或者你只是使用:

int x = 2;

考虑到如何在程序中使用x,后者就是你需要的。

您需要包含stdio.h,告诉编译器printf是标准c库函数。

答案 1 :(得分:4)

原因如下:

  1. initialization makes pointer from integer without a cast - int *x = 2, ...应为int x = 2, ...
  2. incompatible implicit declaration of built-in function ‘printf’ - 您需要在顶部添加#include <stdio.h>
  3. assignment from incompatible pointer type - 这将由#1更改
  4. 修复 声明中
  5. assignment makes pointer from integer without a cast - *starampx应为starampx
  6. 此外,打印指针应使用%p说明符,而不是%d

    printf("%p\n",&x);
    

    以下是您在ideone上的固定程序:link

答案 2 :(得分:3)

在您的代码中,在此声明中,您遇到了问题。

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

*x是一个指针。要存储2的值,您需要为其分配空间。请尝试使用

,而不是当前的实现
int x=2, *ampx, starampx, starx;