#include<stdio.h>
#include<conio.h>
int main()
{
int const anila=10;
int *ptr=&anila;
clrscr();
printf("%d",*ptr);
getch();
return 0;
}
为什么程序中会出现警告?什么是可疑的指针转换?和* ptr =&amp; anila; * ptr将拥有anila的地址。它如何正确打印10?
答案 0 :(得分:3)
anila
为const
,但ptr
为非const
指针,请考虑以下代码:
*ptr = 42;
它试图修改*ptr
,即anila
,这就是为什么会有警告。
答案 1 :(得分:1)
您将const int
的地址指定给指向int
的指针。指针也应该是const int
- 这应该摆脱警告。
答案 2 :(得分:1)
您收到该警告的原因是编译器可以警告您不会意外修改变量anila
:
#include<stdio.h>
int main()
{
int const anila=10;
int *ptr=&anila;
*ptr = 100; // --> This should not be done since you declare anila as const
printf("%d",*ptr);
return 0;
}
当你作为程序员不想要这样的事情发生时(即修改标记为只读的变量),上面的代码工作fine。这样做,代码将无法编译:
int const anila=10;
int const *ptr=&anila;
prog.c:6:6:错误:分配只读位置'* ptr'
* ptr = 100;
另请注意,conio.h
是非标准的。