簡體   English   中英

將常量值分配給指針時,可疑的指針轉換警告為什么?

[英]Suspicious pointer conversion warning while assigning const value to a pointer why?

#include<stdio.h>
#include<conio.h>
int main()
{
     int const anila=10;
     int *ptr=&anila;
     clrscr();
     printf("%d",*ptr);
     getch();
     return 0;
}

為什么在程序中出現警告? 什么是可疑指針轉換? 和* ptr =&anila; * ptr的地址為anila。 如何正確打印10?

anilaconst ,而ptr是非const指針,請考慮以下代碼:

*ptr = 42;

它正在嘗試修改*ptr ,即此處的anila ,這就是為什么會有警告的原因。

您的地址賦給const int指針來int 指針也應該也指向const int這應該擺脫警告。

收到該警告的原因是為了使編譯器可以警告您不要意外修改變量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;
}

當您作為程序員不希望發生這種情況時(例如,修改標記為只讀的變量),以上代碼可以正常工作。 這樣做,代碼將無法編譯:

 int const anila=10;
 int const *ptr=&anila;

prog.c:6:6:錯誤:分配只讀位置'* ptr'

* ptr = 100;

還請注意conio.h是非標准的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM