![](/img/trans.png)
[英]Warning: Suspicious pointer-to-pointer conversion (area too small) with lint
[英]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?
anila
是const
,而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.