关于数组指针的问题

来源:6-3 一般指针,数组指针和指针数组

饿少

2021-05-17

int main(){
char a[] = {“abc”};
char *p;
p = a;
cout << p << endl;
}

既然a指的是数组a[ ]中第一个元素的地址
那么 输出的 p 为什么是 abc 呢,而不是一个地址值,输出a也是abc而不是一个地址值

写回答

2回答

studyFoever

2021-07-13

这是char* 指针与其它指针的区别,其它指针,你直接输出,毫无疑问是一个地址值。比如,int a = 4; int* pa = &a; 那么cout << pa << endl; 一定是一个地址值,假设这个地址值是0x00D3FEC1,但其实紧随其后的3个字节内存也被pa管理(一个内存地址只对应1个字节的内存空间,这里按照int类型占用4个字节考虑)。 但是,比如pa是一个char* 类型指针,你cout << pa <<endl; 它直接从pa存储的地址 所标记的那个内存开始,向后将每个字节存储的二进制数字按照char编码解释成对应的字符,直到遇到'\0'为止。这是C风格字符串存储、处理字符串的一种机制。这种机制不跟踪char*类型指针管理内存块的大小,而且以'\0'为标记来处理。

比如char c = 'a'; char* pc = &c; 那么cout << pc << endl; 你看到的不仅输出的不是字符变量c的地址,而是输出字符a,并且a后面会跟着几个其它字符。这就是因为C/C++处理char*类型机制,他在输出字符a时,继续将a后面的内存中二进制数按照解释成字符编码与之对应的字符,直到遇到'\0'。

0
2
咸鱼味的猫
讲的很好~
2021-10-06
共2条回复

quickzhao

2021-05-18

指针除了地址信息外,还有一个类型属性。当cout << p 时对char* 型进行输出,C++会对数组进行输出,直到'\0'结尾;而你用cout << (*p) << 时就只会输出'a',因为此时类型只是char。

0
0

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程