关于指针算术运算的疑点
关于指针算术运算的疑问
C++ Primer里面是描述的C++标准。有一段中文原话是:指针的算术操作只有在原指针和计算出来的新指针都指向同一个数组的元素或者指向该数组存储空间的下一个单元时才是合法的。
例如:
int arr[5] = {0};
int *p = arr + 10;
这个对p的赋值就是非法的。
可是在VS编译环境下,这样的代码是可以通过编译的。
请问一下,VS在这个现象上是不是没有遵守C++的标准规定呢?
------解决方案--------------------
可以通过 编译什么也说明不了! 编译器只能证明错误 不能证明正确 .
int arr[5] = {0};
int *p = arr + 10;
这个在 arr + 10 这个计算就是非法的了. 因为计算结果超出范围.
VS 没有做错, 因为这是C++ 中的"未定义行为",编译器报错不报错都是它的*.
C++ Primer里面是描述的C++标准。有一段中文原话是:指针的算术操作只有在原指针和计算出来的新指针都指向同一个数组的元素或者指向该数组存储空间的下一个单元时才是合法的。
例如:
int arr[5] = {0};
int *p = arr + 10;
这个对p的赋值就是非法的。
可是在VS编译环境下,这样的代码是可以通过编译的。
请问一下,VS在这个现象上是不是没有遵守C++的标准规定呢?
------解决方案--------------------
可以通过 编译什么也说明不了! 编译器只能证明错误 不能证明正确 .
int arr[5] = {0};
int *p = arr + 10;
这个在 arr + 10 这个计算就是非法的了. 因为计算结果超出范围.
VS 没有做错, 因为这是C++ 中的"未定义行为",编译器报错不报错都是它的*.