黑马程序员技术交流社区

标题: 不是很懂,谁能给个牛逼的解释,谢谢 [打印本页]

作者: John_chow    时间: 2014-10-19 14:07
标题: 不是很懂,谁能给个牛逼的解释,谢谢
#include<stdio.h>
int main()
{

    char arr[] = "string";
    char *p = "string";
   
    printf("%d\t",sizeof(arr));
    printf("%d",sizeof(p));
     while(1);
    return 0;
   
    // 结果是: sizeof(arr) = 7; sizeof(p) = 4;两个混在一起就有小纠结

   
   
}

作者: ジ旋律    时间: 2014-10-19 14:24
看不是太懂
作者: cp1454298677    时间: 2014-10-19 15:52
arr  是 数组 , p 是 指针 大小 是 4个字节(在 32 位机器中)
作者: 哈利梅    时间: 2014-10-19 17:05
个人觉得sizeof(arr) = 7;这个是因为数组中是六个字符,每个字符占一个字节,所以是六个字节,另外,每个字符串后面都有一个\0,这个是隐藏的,也占一个字节,所以输出是7。
sizeof(p) = 4;这个是因为,看p的类型,首先p是char型的,另外p也是个指针,所以编译器就只看指针,不同的机器是不一样的,32位的就是4个字节,所以输出为4。这个是看内存占用字节的,不是看字符个数,OC中length是看字符个数的,那个直接数就行。C中似乎没有数个数的关键字。    个人见解,有可能不是太对,望各位大神给予指点啊~~~
作者: 菜鸟_琦    时间: 2014-10-19 17:51
一个是数组,一个是指针,所占的字节不一样
作者: duzhong    时间: 2014-10-19 22:13
一个是求字符串所占的字节数,一个是求指针所占的字节数。
作者: dream静    时间: 2014-10-19 22:35
前面一个是字符串的字节 's' 't' 'r ''i''n''g''0\'所以是7个字节;
后面一个是指针的字节,指针在32位占用4个字节的空间,64位中占用的是8个字节空间
作者: 弹琴骚年    时间: 2014-10-19 23:40
楼上正解,你用的是32位的系统吧?。。
作者: John_chow    时间: 2014-10-20 22:29
其实还得看sizeof 具体的操作方法了 同样是两个字符串 , 一个计算字符串的长度,一个计算内存地址,计算内存地址还是挺好理解的,就是计算字符串长度不好理解
作者: ジ旋律    时间: 2014-10-30 22:52
学习学习,嘿嘿




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2