地址转换为 int 指针后,打印出的是字符串第一个字符的地址 还是字符串开始的地址?

2017 年 12 月 26 日
 RDF
地址转换为 int 指针后,打印出的是字符串第一个字符的地址 还是字符串开始的地址?
cout << (int *)"Home of the jolly bytes"<<endl;
3517 次点击
所在节点    程序员
37 条回复
tghgffdgd
2017 年 12 月 26 日
你发帖这么久时间自己试一下早就知道答案了,程序员多练习很重要。
RDF
2017 年 12 月 26 日
@tghgffdgd 不会判断打印出的是字符串第一个字符的地址 还是字符串开始的地址。
RDF
2017 年 12 月 26 日
@tghgffdgd 似乎在部分实现中,其开始的地址显示相同,而进行‘+1 ’的操作后,可以看出内存增量的不同, 但 cout 形式的话,不会判断。
justou
2017 年 12 月 26 日
int* 加 1 后是移动了 sizeof(int)个字节了
xiubin
2017 年 12 月 26 日
字符串首地址不就是第一个字符的地址吗?

没了解过 cpp,只学过 c
tghgffdgd
2017 年 12 月 26 日
@RDF +1 操作看指针类型,char*是加 1,int*是加 4 你本地多写几个例子然后打出来看看应该就很容易理解了
amaranthf
2017 年 12 月 26 日
用了这么多年 C++,还不知道字符串的起始地址和字符串首字符的地址有啥区别……
changnet
2017 年 12 月 26 日
我也觉得这两个地址是一样的啊
RDF
2017 年 12 月 26 日
@tghgffdgd 嗷嗷,谢谢~
fxxkgw
2017 年 12 月 26 日
感觉这个问题是科班还是培训机构或者转行最好的判别题目之一。。
wekw
2017 年 12 月 26 日
可能在动态语言程序员眼里,数组是一种高级数据结构吧。。。。
Juggernaut
2017 年 12 月 26 日
c 里面这样操作就是第一个 int 的地址,p+1 的话移 4byte ;
CPP 不知道怎么操作
RDF
2017 年 12 月 26 日
short tell[10];
tell displays &tell[0]
&tell displays address of whole array
地址数字相同,但是含义不一样。
&tell[0], is the address of a 2-byte block of memory
&tell is the address of a 20-byte block of memory

So

tell + 1 adds 2 to the address value
&tell + 1 adds 20 to the address value

......估计还会忘...
RDF
2017 年 12 月 26 日
上文是:字符串首字符的地址,读地址,并显示字符,那(int * )强制转换出的,就是 H 字符所在实际内存地址,

......依旧小晕...
facetest
2017 年 12 月 26 日
好好上过基础课的就不会来发这种问题
tghgffdgd
2017 年 12 月 26 日
@RDF 用多维数组去理解吧,比如 char arr[5][6][7], arr 和 arr[0] 和 arr[0][0] 和 &arr[0][0][0] 几个值相同但意义不一样
RDF
2017 年 12 月 26 日
@tghgffdgd 哦哦
RDF
2017 年 12 月 26 日
@tghgffdgd 还在啃 Compound Types 符合类型的基础, 这部分的基础有点难啃, 快了。
RDF
2017 年 12 月 26 日
@RDF 复合
gnaggnoyil
2017 年 12 月 27 日
C++中 const char [N]并不 type alias 于 int *,所以 LZ 这种行为是 UB.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/417604

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX