gpt4 book ai didi

c - 为什么编译器不在使用指针等数组的表达式上显示错误?

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:51 25 4
gpt4 key购买 nike

我是 C 编程的新手,目前正在学习数组和字符串。我对这个话题很困惑。来回答我的问题-

  1. 由于数组(对于前- a[]={20,44,4,8}),表达式中的名称会衰减为指针常量,所以无论何时我尝试做指针算术例如 - a=a+1 或类似这样的编译器显示错误但是当我在 printf() 函数中写同样的东西时它显示第一个元素的地址而不是显示错误。为什么?
  2. 在表达式中,例如 *(a+1)=2 首先 (a+1) 将被计算,然后 * 将被计算取消引用它。我的问题是,如果 a 是一个指针常量,那么它如何指向数组中的任何其他内存位置以及该表达式如何完全合法?

我试图搜索这方面的内容,但无法获得准确的结果。

最佳答案

虽然数组名称在某些表达式中计算为指针,但您的 a = a+1 赋值尝试分配给数组,这是不允许的。

另一方面,a+1 表达式是允许的,它求值为另一个指针。当您将此值传递给 printf 时,该函数会愉快地打印它。不要忘记在打印时将结果转换为 void*:

printf("%p\n", (void*)(a+1));

if a is a pointer constant then how it can point to any other memory location in an array and how is *(a+1) expression perfectly legal?

出于同样的原因,2+3(两个常量的组合)产生的值既不是 2 也不是 3。在您的示例中,a+1 表达式不修改 a。相反,表达式将它用作“起点”,计算不同的值(恰好是指针类型),并保持 a 不变。

关于c - 为什么编译器不在使用指针等数组的表达式上显示错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com