VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 偶素菜鸟

一个入学者的问题,我整不明白了,大伙帮帮忙

[复制链接]

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-23 17:15:01 | 显示全部楼层
delete 是用来针对堆内存的释放的
所以1:
char * z = new char[6];
delete [] z;
可以

所以2:
z = "abcde";
这个时候,因为"abcd"是不再是申请了堆内存,
delete[]z
错误

个人观点,呵呵!!
回复

使用道具 举报

1

主题

39

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-5-29 10:15:01 | 显示全部楼层

cout<<hex<<&z+k<<endl;

改成:
cout << hex << &z[k] << endl;
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-10 16:30:01 | 显示全部楼层
zfy010317 兄:
cout<<hex<<&z+k<<endl;

改成:
cout << hex << &z[k] << endl;

没有弄明白几不要滥发贴,
偶认为至少要动手调试一下才有发言权
要不然很容易误导大家

对于楼主的第二个问题, ch1074856 兄是正解
&z+k 是根本没有意义的一个地址
要想取得数组里面所有元素的地址,只需把取地址符号&去掉即可
因为z本身代表的就是数组的首地址
cout<<hex<<z+k<<endl;
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-17 10:00:01 | 显示全部楼层
楼上,zfy010317 说的是以对的,错的是你(你说人家没有调试,你调试了吗)
回复

使用道具 举报

1

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-6-18 10:30:01 | 显示全部楼层
同意!
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-18 20:15:01 | 显示全部楼层
向sun88888 说Sorry,你也是对的,航天奇侠也是对的:


    char z[]= "abcde";
    for(int k=0; k<5; k++)
    {
        cout<<hex<<(int*)(z+k)<<endl;//经测试,要输出地址,必须将char*型地址转换为int*,不然就输出字符.
        cout<<hex<<(int*)&z[k]<<endl;//航天奇侠
        cout<<z[k]<<endl;
    }
回复

使用道具 举报

0

主题

55

帖子

44.00

积分

新手上路

Rank: 1

积分
44.00
发表于 2020-6-19 17:15:02 | 显示全部楼层
楼主cout<<typeid(&z+k).name()<<endl;
cout<<typeid(*(z+k)).name()<<endl;
试试就知道了。
回复

使用道具 举报

1

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-7-17 13:45:01 | 显示全部楼层
太感谢大家了。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表