C++ 为什么一个字符在数组中占据的空间似乎比它本身要多 char testChar='a'; char myCharString[]=“asd”; char*pointerToFirstChar=&(myCharString[0]); char*pointerToSecondChar=&(myCharString[1]); 由于

C++ 为什么一个字符在数组中占据的空间似乎比它本身要多 char testChar='a'; char myCharString[]=“asd”; char*pointerToFirstChar=&(myCharString[0]); char*pointerToSecondChar=&(myCharString[1]); 由于,c++,pointers,char,memory-address,C++,Pointers,Char,Memory Address,&pointerToFirstChar和&pointertoseconchar,您获取的不是char数组元素的地址,而是局部变量pointerToFirstChar和pointertoseconchar的地址。注意,它们本身就是指针 您可能需要: char testChar = 'a'; char myCharString[] = "asd"; char *pointerToFirstChar = &(myCharString[0]); char *pointerToSecondChar

&pointerToFirstChar
&pointertoseconchar
,您获取的不是
char
数组元素的地址,而是局部变量
pointerToFirstChar
pointertoseconchar
的地址。注意,它们本身就是指针

您可能需要:

char testChar = 'a';
char myCharString[] = "asd";
char *pointerToFirstChar = &(myCharString[0]);
char *pointerToSecondChar = &(myCharString[1]);
cout << "A char takes " << sizeof(testChar) << " byte(s)";
cout << "Value was " << pointerToFirstChar << ", address: " << &pointerToFirstChar << endl;
cout << "Value 2 was " << pointerToSecondChar << ", address:" << &pointerToSecondChar << endl;

cout
&pointerToFirstChar
&pointertoseconchar
,您获取的不是
char
数组元素的地址,而是局部变量
pointerToFirstChar
pointertoseconchar
的地址。注意,它们本身就是指针

您可能需要:

char testChar = 'a';
char myCharString[] = "asd";
char *pointerToFirstChar = &(myCharString[0]);
char *pointerToSecondChar = &(myCharString[1]);
cout << "A char takes " << sizeof(testChar) << " byte(s)";
cout << "Value was " << pointerToFirstChar << ", address: " << &pointerToFirstChar << endl;
cout << "Value 2 was " << pointerToSecondChar << ", address:" << &pointerToSecondChar << endl;

cout您正在查看指针
pointerToFirstChar
pointertoseconchar
的地址。它们是指向char的指针;比较它们的值,它们将相差1。您似乎已经在文本中编辑掉了它。

您正在查看指针
pointerToFirstChar
pointertoseconchar
的地址。它们是指向char的指针;比较它们的值,它们将相差1。您似乎在文本中已将其编辑掉。

您正在打印指针变量的地址,而不是指针当前所在的地址

例如:

pointerToFirstChar=0xF8C2的地址,它保存地址&myCharString[0]=0xFE20

所以您正在打印0xF8C2,而不是打印0xFE20

按如下方式更新代码以获得正确的结果


cout您正在打印指针变量的地址,而不是指针当前所在的地址

例如:

pointerToFirstChar=0xF8C2的地址,它保存地址&myCharString[0]=0xFE20

所以您正在打印0xF8C2,而不是打印0xFE20

按如下方式更新代码以获得正确的结果


cout您正在获取指针的地址。您正在获取指针的地址。@downvoter:请告诉我哪里错了,我可以改进它。@downvoter:请告诉我哪里错了,我可以改进它。
&myCharString[0] = 0xFE20  
&myCharString[1] = 0xFE21  
&myCharString[2] = 0xFE23  
char *pointerToFirstChar = &(myCharString[0]);