我刚开始用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;
}
答案 0 :(得分:4)
int *x=2
实际上是导致程序出现未定义的行为。它告诉编译器指向地址2
,它可能有效也可能无效,并且引用指针将导致未定义的行为。
每当使用指针时,您需要使指针指向一个足够大的有效内存,以便在存储任何内容之前存储int
。所以你要么:
int i = 2;
int *x = &i;
或者你只是使用:
int x = 2;
考虑到如何在程序中使用x
,后者就是你需要的。
您需要包含stdio.h
,告诉编译器printf
是标准c库函数。
答案 1 :(得分:4)
原因如下:
initialization makes pointer from integer without a cast
- int *x = 2, ...
应为int x = 2, ...
incompatible implicit declaration of built-in function ‘printf’
- 您需要在顶部添加#include <stdio.h>
行assignment from incompatible pointer type
- 这将由#1更改assignment makes pointer from integer without a cast
- *starampx
应为starampx
。此外,打印指针应使用%p
说明符,而不是%d
:
printf("%p\n",&x);
以下是您在ideone上的固定程序:link。
答案 2 :(得分:3)
在您的代码中,在此声明中,您遇到了问题。
int *x=2, *ampx, *starampx, starx;
^ ^
| |
*x
是一个指针。要存储2
的值,您需要为其分配空间。请尝试使用
int x=2, *ampx, starampx, starx;