请教c语言中打印变量的大小被警告是为啥(VS2019/Debug/x64)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教c语言中打印变量的大小被警告是为啥(VS2019/Debug/x64)?相关的知识,希望对你有一定的参考价值。

需要改为
printf("%llu",sizeof(pc)); 或printf("%d",(int)sizeof(pc));
因为在x64 环境下sizeof()返回的是一个64位无符号数。
参考技术A 64位的编译器,sizeof求pc指针长度,即求pc的内存地址,是一个64位二进制数,%d已经无法表示,就发生了这个警告,警告已经明确提示了这个问题。本回答被提问者采纳

c语言常量指针赋值给变量指针导致警告


常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针。指针指向的对象是常量,那么这个对象不能被更改。常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。

在C/C++中,常量指针是这样声明的:

1)const int *p;

2)int const *p;

例子:

int a = 5;

const int b = 8;

const int *c = &a; // 这是合法的,非法的是对c的使用

*c = 6; // 非法,但可以这样修改c指向的对象的值:a = 6;

const int *d = &b; // b是常量,d可以指向b,d被赋值为b的地址是合法的

我在这里想重点说明的是,在一个函数的定义里,将一个常量指针赋值给变量指针,然后通过这个变量指针是可以修改常量指针指向的对象的。

但是,编译器会给出一个警告:warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  p=a;
   ^
void testp(const int *a,int n)
{
  int *p;
  p=a;
  p[0]=12;     //修改了数组a[0]的值,而编译器只是给了一个警告,所以,警告也要足够重视。
  a[0]=12;     //直接修改a,编译器会报错,因为定义了const属性。
}

以上是关于请教c语言中打印变量的大小被警告是为啥(VS2019/Debug/x64)?的主要内容,如果未能解决你的问题,请参考以下文章

VS2010 编写c语言变量为啥要初始化?

最近在自学C语言,用的VS2019,为啥照抄结果还报错?请指教。。。。

使用vs2013编写c语言程序 为啥 会出现max函数没有被定义error

请教:C语言中如何将一字符串转换成无符号整型

c语言常量指针赋值给变量指针导致警告

在VS2020中C语言获取字符串长度编程中,代码输入出现一个警告,警告是C6054,怎么解决?