char p1[]="aaaa"; char* p2="aaaa"; 的内存分配情况,是否一样?

wd_6532 2006-01-20 02:43:50
rt
...全文
677 42 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kid4you 2006-01-30
  • 打赏
  • 举报
回复
多看看那几本书还是有好处滴:>
BBirdlyh 2006-01-30
  • 打赏
  • 举报
回复
同意bobob(PDFViewer2.0 Release拉!)无论用不用char* p2="aaaa 编译器都会当常量对待,一般这样写是不提倡再去更改这段存储区的内容,当然如果应要改也可以用p2[0]='b';它毕竟是指针。用不用const是编程习惯好坏的问题
wd_6532 2006-01-30
  • 打赏
  • 举报
回复
原来 effectiveC++.chm 中 第一条款就有声明字符串的最优方法。
hdqqq 2006-01-25
  • 打赏
  • 举报
回复
sizeof(p1) != sizeof(p2)
p1分配的是4个字符的空间,p2分配的是一个指针的空间.
BombZhang 2006-01-25
  • 打赏
  • 举报
回复
p2只是一个指针变量,指向字符串常量“aaaa”的首地址。
wd_6532 2006-01-25
  • 打赏
  • 举报
回复
呵呵
bobob 2006-01-25
  • 打赏
  • 举报
回复
char p1[]="aaaa"; char* p2="aaaa";
区别很大

char p1[]="aaaa"; 定义了一个数组,并且初始化为"aaaa",可以使用类似p1[0]='b'的语句,但绝对不能类似p1=p;去使用,这里p是个指针,或数组首地址.

char* p2="aaaa"; 定义了一个指针,并且初始指向一个静态区存储的常量字串,注意这个"aaaa"是分配在静态常量区,也就是说,现在绝对不可以类似这样使用:p2[0]='b';但是可以这样使用:p2 = p;这里的p是个指针,或数组首地址,假如p指向的空间不是常量区,那么现在就可以
这样使用:p2[0]='b';

顺便说一下,大家在这里探讨技术问题,不要涉及人身攻击
ncucf 2006-01-25
  • 打赏
  • 举报
回复
安全的写法应该是:
char* p2=new char[5];
lstrcpy(p2,"aaaa");
ncucf 2006-01-25
  • 打赏
  • 举报
回复
const char* const p2="aaaa";
多半会有警告,只需要一个const就行了。
————————————————————————————
不是这样的吧,这是声明一个指向字符串常量的常指针,但楼主根本用不上,楼主只需要用
const char *p2="aaaa",就可以了,这是声明一个指向字符串常量的指针(不是常指针)


: hjcy_2002(hjcy) ( ) 信誉:69 2006-01-23 11:07:00 得分: 0


syy64(太平洋) ( ) 信誉:145
是个猪头,什么都不懂,在那里乱说,怎么混到两个星星的?


——————————————
这个人自己不太懂吧,syy64应该没说错什么!

rageliu 2006-01-25
  • 打赏
  • 举报
回复
大家都是为了解决问题,请不要进行人身攻击

我想内存的分配是一样的,只是存储区不同
char p1[]="aaaa";
char* p2="aaaa";p2是栈上4个字节的指针,指向的是常量字符串,常量字符串在静态存储区

syy64 2006-01-23
  • 打赏
  • 举报
回复
哥们,说话要礼貌点,虽说我对这个问题的说法不一定准确,但我的两颗星可是一分分挣来的,楼上的的打击范围也太大了点,感觉不像个程序员,到像个小混混。
hjcy_2002 2006-01-23
  • 打赏
  • 举报
回复
syy64(太平洋) ( ) 信誉:145
是个猪头,什么都不懂,在那里乱说,怎么混到两个星星的?
wd_6532 2006-01-23
  • 打赏
  • 举报
回复
to JonneyR(lxc)

这句你可以改成
char *p="aaaa";
*p = 'a';

====================
char *p="aaaa";
*p = 'a'; 能运行不出错吗?
JonneyR 2006-01-23
  • 打赏
  • 举报
回复
赞成 bomdy()
JonneyR 2006-01-23
  • 打赏
  • 举报
回复
char *p="aaaa";
p[0]='a'; 这句编译是通过的,而运行是报错的。

这句你可以改成
char *p="aaaa";
*p = 'a';
对下一个p[1]来说为:
*p+1 = 'a';
JonneyR 2006-01-23
  • 打赏
  • 举报
回复
如果const char*p="aaaa";
p[0]='a;'; 这句编译的时候就错了,从而防止运行bug了。

这个编译的时候当然会报错啦,你是想修改一个定义的常量啊
比如
const int i = 3;
i = 4;
也会报错啊,不是吗?
lzzqqq 2006-01-23
  • 打赏
  • 举报
回复
我想应该是一样的.
kw_jiang771207 2006-01-23
  • 打赏
  • 举报
回复
asdfasdf
lukeguo 2006-01-21
  • 打赏
  • 举报
回复
char* p2="aaaa"; 的这种写法是可以的,很方便。但我只是在定义字符串数组时使用:
char* p2[]={"aaaa","bbb","ok",""};
baqiao1211 2006-01-21
  • 打赏
  • 举报
回复
精辟
加载更多回复(22)

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧