C++ 指针和字符数组混淆 #包括 使用名称空间std; int main() { 字符str[]{“测试”}; char*p{str}; cout

C++ 指针和字符数组混淆 #包括 使用名称空间std; int main() { 字符str[]{“测试”}; char*p{str}; cout,c++,pointers,C++,Pointers,让我们一行一行走: cout << p; 此行定义了一个名为str的变量,该变量的类型为8个字符的数组,并使用字符TESTING加上一个NUL字符对其进行初始化,以标记结束 char str[] {"TESTING"}; 这个函数定义了一个名为p的变量,类型为pointer to char,并将其初始化为数组str(第一个T)的第一个字符的地址。这是因为在大多数情况下,数组会自动衰减为指针 char *p {str}; 这个很简单。*操作符访问p指向的字符(再次是S)并在STD

让我们一行一行走:

cout << p;
此行定义了一个名为
str
的变量,该变量的类型为8个字符的数组,并使用字符
TESTING
加上一个NUL字符对其进行初始化,以标记结束

char str[] {"TESTING"};
这个函数定义了一个名为
p
的变量,类型为pointer to char,并将其初始化为数组
str
(第一个
T
)的第一个字符的地址。这是因为在大多数情况下,数组会自动衰减为指针

char *p {str};
这个很简单。
*
操作符访问
p
指向的字符(再次是
S
)并在STDOUT中打印它。然后它增加指针,因为它是一个后增量操作符。现在它指向第二个
T

cout << *p++;
cout让我们一行一行走:

cout << p;
此行定义了一个名为
str
的变量,该变量的类型为8个字符的数组,并使用字符
TESTING
加上一个NUL字符对其进行初始化,以标记结束

char str[] {"TESTING"};
这个函数定义了一个名为
p
的变量,类型为pointer to char,并将其初始化为数组
str
(第一个
T
)的第一个字符的地址。这是因为在大多数情况下,数组会自动衰减为指针

char *p {str};
这个很简单。
*
操作符访问
p
指向的字符(再次是
S
)并在STDOUT中打印它。然后它增加指针,因为它是一个后增量操作符。现在它指向第二个
T

cout << *p++;

cout不是一个确切的答案,而是代码在做什么的分解

cout << p;
#包括
使用名称空间std;
int main()
{
字符str[]{“测试”};
char*p{str};//p指向:“T”
p++;//p指向:“E”
++p、 //p指向:“S”

cout不是一个确切的答案,而是代码在做什么的分解

cout << p;
#包括
使用名称空间std;
int main()
{
字符str[]{“测试”};
char*p{str};//p指向:“T”
p++;//p指向:“E”
++p、 //p指向:“S”

难道
(a,b,c)
的结果是c。如果这有帮助
(a,b,c)
的结果是c。如果这有助于你的详细回答,那就非常感谢。你能再解释一下
操作符吗?为什么它在两个(E,S)之间打印S
运算符实际上很简单。表达式
E,S
的计算方法如下:首先计算
E
并丢弃结果,然后计算
S
,并将结果用作完整表达式的值。通常
E
是用于副作用,而不是用于其实际值s case…?基本上它只是打印出
?@user5372775的第二部分:不完全正确。求值意味着:计算值并运行副作用。
++
运算符(前缀和后缀)有副作用,即指针的增量。如果执行
x=(3,4)这很愚蠢,
3
什么都不做。但是如果你做
x=(p++,*p);
那么
p
首先是递增的,然后是取消引用的。这就像:
p++;x=*p;
。哦,我想知道我是否可以在网站的聊天中问你这些小东西(如果有)因为它不值得创建新的线程。非常感谢您的详细答案。请您再次解释一下
操作符,好吗?为什么它打印在两个(E,s)之间
运算符实际上很简单。表达式
E,S
的计算方法如下:首先计算
E
并丢弃结果,然后计算
S
,并将结果用作完整表达式的值。通常
E
是用于副作用,而不是用于其实际值s case…?基本上它只是打印出
?@user5372775的第二部分:不完全正确。求值意味着:计算值并运行副作用。
++
运算符(前缀和后缀)有副作用,即指针的增量。如果执行
x=(3,4)这很愚蠢,
3
什么都不做。但是如果你做
x=(p++,*p);
那么
p
首先是递增的,然后是取消引用的。这就像:
p++;x=*p;
。哦,我想知道我是否可以在网站的聊天中问你这些小东西(如果有)因为创建新线程不值得