关于数组指针的问题
来源:6-3 一般指针,数组指针和指针数组
饿少
2021-05-17
int main(){
char a[] = {“abc”};
char *p;
p = a;
cout << p << endl;
}
既然a指的是数组a[ ]中第一个元素的地址
那么 输出的 p 为什么是 abc 呢,而不是一个地址值,输出a也是abc而不是一个地址值
2回答
-
这是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'。
022021-10-06 -
quickzhao
2021-05-18
指针除了地址信息外,还有一个类型属性。当cout << p 时对char* 型进行输出,C++会对数组进行输出,直到'\0'结尾;而你用cout << (*p) << 时就只会输出'a',因为此时类型只是char。
00
相似问题