c语言小疑问求解。。。

SunnyKui 发布于 2013/12/22 18:21
阅读 162
收藏 1
int s=(int)"aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee";
printf("%s\n",s);

为啥我打了那么长的字符串 s还能存储呢?我电脑int 是4字节的


加载中
0
Bigjin
Bigjin
#include "stdio.h"

int main(int argc, char const *argv[])
{
    char * c = "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee";
    printf("%d\n",c);
    printf("%d\n",(int)c);
    int s=(int)"aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee";
    printf("%d\n",s);
    printf("%s\n",s);
    return 0;

}

输出结果 是 

4195928
4195928
4195928
aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee


字符串返回的是地址, 你只是把地址转换成了 int 类型



SunnyKui
SunnyKui
think you !!
0
NealFeng
NealFeng
这大概是保存了字符串的指针?
SunnyKui
SunnyKui
还是不明白啊
0
狮子的魂
狮子的魂

"aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee"返回的是指针,也就是返回的是这个字符串存储的首地址,或者说是内存的标号,也就是一个整数,所以:

int s=(int)"aaaaaaaabbbbbbbbccccccccddddddddeeeeee
表示将这个字符串的地址(内存标号)存储在s中,而不是想象的整个字符串都存到了s中。。。。

SunnyKui
SunnyKui
谢谢,咋判断 返回的是指针呀?
0
NealFeng
NealFeng

引用来自“NealFeng”的答案

这大概是保存了字符串的指针?
回复 @SunnyKui : 正常来说字符串应该是这样的:char *szStr = "1234";,也就是说常量表达式"1234"返回的是一个指针类型,szStr 是个指针,指针本来就是个地址,32机上是32位,然后你又用(int)把它强制转换成了int,放在了变量s里,然后printf函数又把s转换成了指针,所以你只是在把指针的类型换来换去,实际指针指向的字符串并没有变化。估计是这样,我C也不熟悉。
SunnyKui
SunnyKui
谢谢,我也刚学,还没到指针呢
0
中山野鬼
中山野鬼

引用来自“林大锦”的答案

#include "stdio.h"

int main(int argc, char const *argv[])
{
    char * c = "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee";
    printf("%d\n",c);
    printf("%d\n",(int)c);
    int s=(int)"aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee";
    printf("%d\n",s);
    printf("%s\n",s);
    return 0;

}

输出结果 是 

4195928
4195928
4195928
aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee


字符串返回的是地址, 你只是把地址转换成了 int 类型



哈,这个正解如果转到64位编译下,就有故事了。哈。除非栈地址高32位是0.
SunnyKui
SunnyKui
谢谢鬼哥了,离鬼哥境界 还差太远太远了
返回顶部
顶部