C++中字符指针和字符串常量应该注意的地方

//字符指针和字符串的一些容易混淆的地方,在这里自己总结了一点经验,如果有什么不正确的地方希望大家可以指出来。我是个初学者,还望多多指导


#include<iostream.h>
#include<string.h>


int main()
{
     char *str = "my china"; //该语句虽然编译连接时没有错误,但是在运行的时候就会出现错误,报告内存不可写。
                                //原因就是str指针变量指向的是一个字符常量,如果str指向的内存再次被赋值就出出错。
//正确的写法应该是 const char* str = "my china";这样在编译时就会提醒错误。

strcpy(str,"no");


cout<<str<<endl;
return 0;
}



//如何输出指针变量的地址和指针变量指向的地址
#include<iostream.h>
#include<string.h>


int main()
{


char* str = new char[10];  //动态分配内存
strcpy(str,"my china");
str = "dhh";       //此时str指针变量不在指向分配的空间,而是指向字符常量"d"的内存单元,
                       //这样就不能再改变内存的值了


cout<<str<<endl;
cout<<&str<<endl;                                           //输出指针向量str的地址
cout<<"0X"<<hex<<(int)str<<endl;                  //指针str指向的内存首地址,hex是以16进制输出
cout<<"0X"<<hex<<(int)&(str[1])<<endl;         //指针str指向的首地址下面的一个字节内存


return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值