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;
。哦,我想知道我是否可以在网站的聊天中问你这些小东西(如果有)因为创建新线程不值得