指针相关的常见未定义行为有如下内容:
其他常见未定义行为如下:
更完整的未定义行为列表可以在这里找到。
printf(“%d”, i++*i++);
printf("%d,%d\n",++n,power(2,n));3.通过指针修改const常量的值,编译器对于向常量所在内存赋值这件事的处理是未定义的。
int main() { const int a = 1; int *b = (int*)&a; *b = 21; printf("%d, %d", a, *b); return 0; }
int i=0;i=(i++);不知道编译器会怎么选择自增和赋值的顺序,所以这是由编译器决定的,属于未定义行为。 char *p=”hello”;p[1]=’E’“hello”这个字符串属于一个字符串常量了。指针p指向了这个字符串常量,通过这个指针来直接修改常量第二个字符,这也属于未定义行为。 char *p=”hello”;char ch=*p++ 只是通过指针找到第二个字符并将它赋值给一个字符变量,并没有改变这个字符串常量,所以不属于未定义行为。