C++ cout输出 字符型变量的地址

在C++中,如果cout一个字符数组的话,那么它会沿着这个地址,一直输出这个字符串,直到遇到'\0'
实际上,C++标准库中I/O类对输出操作符<<重载,在遇到字符型指针时会将其当做字符串名来处理,输出指针所指的字符串。既然这样,我们就别让他知道那是字符型指针,所以得进行类型转换,即:希望任何字符型的指针变量输出为地址的话,都要作一个转换,即强制char *转换成void *


#include<iostream>
int main(){
const short ITEMS=5;
int intArray[ITEMS]={1,2,3,4,5};
char charArray[ITEMS]={'L','M','Y','L','R'};
int *intPointer=intArray;
char *charPointer=charArray;
std::cout<<"整形数组输出"<<"\n";
for(int i=0;i<ITEMS;i++){
std::cout<<*intPointer<<"  at   "<<intPointer<<"\n" ;
intPointer++;
}
std::cout<<"字符型数组输出"<<"\n";
for(int i=0;i<ITEMS;i++){
std::cout<<*charPointer<<"  at   "<<charPointer<<"\n" ;
charPointer++;
}


return 0;
}



整形数组输出
1  at   0x29ff00
2  at   0x29ff04
3  at   0x29ff08
4  at   0x29ff0c
5  at   0x29ff10
字符型数组输出
L  at   LMYLR@
M  at   MYLR@
Y  at   YLR@
L  at   LR@
R  at   R@



对字符型指针进行强制类型转换之后:

#include<iostream>
int main(){
const short ITEMS=5;
int intArray[ITEMS]={1,2,3,4,5};
char charArray[ITEMS]={'L','M','Y','L','R'};
int *intPointer=intArray;
char *charPointer=charArray;
std::cout<<"整形数组输出"<<"\n";
for(int i=0;i<ITEMS;i++){
std::cout<<*intPointer<<"  at   "<<intPointer<<"\n" ;
intPointer++;
}
std::cout<<"字符型数组输出"<<"\n";
for(int i=0;i<ITEMS;i++){
std::cout<<*charPointer<<" at   "<<(void *)charPointer<<"\n" ;
charPointer++;
}


return 0;
}


整形数组输出
1  at   0x29ff00
2  at   0x29ff04
3  at   0x29ff08
4  at   0x29ff0c
5  at   0x29ff10
字符型数组输出
L at   0x29fef0
M at   0x29fef1
Y at   0x29fef2
L at   0x29fef3
R at   0x29fef4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值