C中的指针操作

Mah*_*nde 3 c pointers

我是C编程的新手.在解决我的一个课堂作业时,我遇到了以下代码片段.我不明白它的作用.

可以任何人告诉我下面的C语法是什么意思,

((char *)0 +1) or ((int*)0 +1))
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 6

(char *) 0部分在地址0处创建指向字符数据的指针.然后,该地址递增1,触发未定义的行为,因为指向地址0的指针(也称为NULLC)不能用于指针算术.第二部分做同样的但是指向整数数据的指针.

如果编译器只是将NULL地址视为地址(这是常见的,但同样不需要,这就是为什么这是未定义的行为),如果以数字方式查看,结果地址将不相同,因为C中的指针算法是按照指向的类型,通常sizeof (int) > sizeof (char).

  • 也许值得一提的是,代码调用未定义的行为,因为对`NULL`(`((T*)0)`is)执行指针运算是非法的. (2认同)
  • @JoãoFernandes:从技术上讲,第一个也没有明确定义.根据C标准,从整数到指针的强制转换仅对通过从目标类型的指针强制转换为首先获得的整数值有效.所以`int a; uintptr_t i =&a; int*p =(int*)i;`是由`int*q = 0x定义的```只有当这是一个系统范围的静态对象的值时才被定义,这个对象的指针已被强制转换为int那个数字文字. (2认同)