char* 的问题、c++ /C 相关

[复制链接]
查看11 | 回复7 | 2021-1-27 06:48:55 | 显示全部楼层 |阅读模式
我们可以
char* ch="dadawdawd";
也可以
char*ch;
然后进行赋值,
还可以
char*ch=newchar[20];
然后进行赋值。
这边我们使用
char*ch;
然后赋值的时候是不是会有几率把别的可以正在被使用的内存的值修改掉。。因为我们并没有给他申请空间
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
是。。。。。。
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
比如下标越界


回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
你想多了正在被使用的内存空间,和声明的没初始化的空间根本不是放在一个地方
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
内核会做保护的。。指向的都是无效的地方。。不信你试试&ch
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
给ch赋值和给ch指向的空间赋值是不一样的。
在定义了ch之后,ch自己就有自己的空间了。
如果需要向ch指向的地方赋值,那么也需要有指向的地方的空间,此时需要new出来。
还有char*ch="aaaaaaaaa";是不正确的,必须是charconst*ch="aaaaaaaaaa";这个编译器不报错是历史的原因。
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
凡是用引号引起来的字符串常量,编译时就已经为其分配了空间,其也有自身的地址。
1.char*pch="dadawdawd";
声明一个编译时字符串常量,它有自己的存储区。
声明一个字符指针,初始值为指向该字符串常量。
你也可以指向其他字符串:
pch="asfdasdfasd";
这个字符串常量也有自己的存储区域,指针现在指向了这块区域。
2.char*pch;
声明一个字符指针,初始值未定,未指向任何字符串。
pch="asfdasdfasd";
同上,指向一个新的字符串,与1的区别只是初始化时未指向任何字符串。
3.char*pch=newchar[20];
声明一个字符指针,初始值为指向的运行时动态分配的20字节空间。
strcpy(pch,"dadawdawd");
向指针指向的这块分配的空间拷贝字符串。
pch="asfdasdfasd";
同上,指向一个新的字符串,但原来的控件和内容还在(原来的空间要释放,此处略去)。
1、2只是改变了指向,并非对pch指向的空间赋值。1和2都是改变了指向的值,没法写入的。3中的strcpy才是修改该空间的内容。
char*pch="dadawdawd";
*pch='b';//错误
charbuff[256];
pch=buff;
*pch='b';//正确
回复

使用道具 举报

千问 | 2021-1-27 06:48:55 | 显示全部楼层
编译器有指针帮你看着那些
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行