#include <iostream>
using namespace std;
int main()
{
char str[] {"TESTING"};
char *p {str};
cout << (p++, *++p);
cout << *p++;
cout << p;
return 0;
}它返回"SSTING“
我知道这篇文章可能不是专门针对堆栈溢出的,但我不知道它能做什么,也找不到任何关于它的文档。
cout << (p++, *++p); 我第一次看到圆括号时.他们的功能是什么?
这句话不应该只说“测试”,但似乎只说“丁”
cout << p;谢谢!
发布于 2016-12-06 00:30:11
让我们一条条地走:
char str[] {"TESTING"};这一行定义了一个名为str的变量,其类型为8个字符数组,并使用字符TESTING和一个NUL对其进行初始化以标记结束。
char *p {str};这个变量定义了一个名为p的变量,指针类型为char,并将其初始化到数组str (第一个T)的第一个字符的地址。这是因为数组在大多数使用中都会自动衰减为指针。
cout << (p++, *++p);这一行做了几件事。,运算符首先计算增加指针的左手操作符p++,现在指向E;然后计算右操作符*++p,但这是一个增量前运算符,因此它再次增加指针(指向S)。最后,*操作符访问p指向的内存,结果是一个S。这个字印在STDOUT上。
cout << *p++;这个很简单。*操作符访问p (再次是S )所指向的字符,并在STDOUT中打印它。然后,它增加指针,因为它是一个后增量运算符。现在它指向第二个T。
cout << p;至少,这一行将打印p指向的字符串,直到找到NUL字符为止。由于p指向数组的第二个T,它将打印TING。
将所有这些输出组合在一起,就可以得到SSTING。
发布于 2016-12-06 00:35:44
不完全是答案,而是代码的分解,
#include <iostream>
using namespace std;
int main()
{
char str[]{"TESTING"};
char *p{str}; // p points to: 'T'
p++; // p points to: 'E'
++p; // p points to: 'S'
cout << *p; // output a single char: 'S'
cout << *p; // ouptut a single char: 'S'
p++; // p points to: 'T'
cout << p; // output a (char *) type pointer, AKA a C-string, "TING";
return 0;
}https://stackoverflow.com/questions/40985704
复制相似问题