A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© John_chow 中级黑马   /  2014-10-19 14:07  /  1269 人查看  /  9 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

#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;两个混在一起就有小纠结

   
   
}

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

9 个回复

倒序浏览
ジ旋律 来自手机 中级黑马 2014-10-19 14:24:05
沙发
看不是太懂
回复 使用道具 举报
arr  是 数组 , p 是 指针 大小 是 4个字节(在 32 位机器中)
回复 使用道具 举报
个人觉得sizeof(arr) = 7;这个是因为数组中是六个字符,每个字符占一个字节,所以是六个字节,另外,每个字符串后面都有一个\0,这个是隐藏的,也占一个字节,所以输出是7。
sizeof(p) = 4;这个是因为,看p的类型,首先p是char型的,另外p也是个指针,所以编译器就只看指针,不同的机器是不一样的,32位的就是4个字节,所以输出为4。这个是看内存占用字节的,不是看字符个数,OC中length是看字符个数的,那个直接数就行。C中似乎没有数个数的关键字。    个人见解,有可能不是太对,望各位大神给予指点啊~~~

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

回复 使用道具 举报
一个是数组,一个是指针,所占的字节不一样
回复 使用道具 举报
一个是求字符串所占的字节数,一个是求指针所占的字节数。
回复 使用道具 举报
前面一个是字符串的字节 's' 't' 'r ''i''n''g''0\'所以是7个字节;
后面一个是指针的字节,指针在32位占用4个字节的空间,64位中占用的是8个字节空间
回复 使用道具 举报
楼上正解,你用的是32位的系统吧?。。
回复 使用道具 举报
其实还得看sizeof 具体的操作方法了 同样是两个字符串 , 一个计算字符串的长度,一个计算内存地址,计算内存地址还是挺好理解的,就是计算字符串长度不好理解
回复 使用道具 举报
ジ旋律 来自手机 中级黑马 2014-10-30 22:52:53
10#
学习学习,嘿嘿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马