将const值赋给指针时可疑指针转换警告为什么?

时间:2014-04-24 12:28:25

标签: c pointers

#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?

3 个答案:

答案 0 :(得分:3)

anilaconst,但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是非标准的。