Ort*_*dex 0 c++ pointers turbo-c++
我正在解决老师给我的一个问题并且遇到了一些问题.我应该给出以下代码的输出:(用Turbo C++编写)
#include<iostream.h>
void main()
{
char *p = "School";
char c;
c=++(*(p++));
cout<<c<<","<<p<<endl;
cout<<p<<","<<++(*(p--))<<","<<++(*(p++))<<endl;
}
Run Code Online (Sandbox Code Playgroud)
程序给出的输出是:
T,chool
ijool,j,i
Run Code Online (Sandbox Code Playgroud)
我得到了指针本身增量的部分,然后递增指针指向的值.但我没有得到字符串打印出来的部分ijool
有人可以帮我吗?
你展示的程序是非标准的和不正确的(不应该编译).
"小"问题:
<iostream>不是<iostream.h>main()返回一个int,而不是一个void.cout并且endl不能在没有using namespace std;文件开头的情况下使用,或者更好:使用std::cout和std::endl."核心"问题:
char* p = "School";是指向字符串litteral的指针.此转换在C++ 03中有效,在C++ 11中已弃用.除此之外,通常字符串litterals是只读的,并且尝试修改它们通常会导致段错误(并且修改字符串litteral是标准的未定义的行为).因此,每次使用时都会有未定义的行为p,因为您修改了它指向的内容,即字符串litteral.p了几次std::cout<<p<<","<<++(*(p--))<<","<<++(*(p++))<<std::endl;.这是未定义的行为.p没有定义用于操作的顺序,这里似乎编译器从右边开始.您可以查看序列点,序列之前/之后的序列以获得更好的解释.| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |