sizeof(char),sizeof(char*),sizeof(char[4]),

原文链接: https://my.oschina.net/liuchuanfeng/blog/663639

原文链接:https://my.oschina.net/liuchuanfeng/blog/663639

32位系统,地址长度是32位(bit),也就是4Byte; 64位系统,地址长度是64位(bit),也就是8Byte

运用1:

char a[] = "hello world"; //自动为末尾加上'/0'
char b[14] = "hello world";
char *p = a;
char *dd = "01234";
NSLog(@"%ld", sizeof(a));
NSLog(@"%ld", sizeof(b));
NSLog(@"%ld", sizeof(p));
NSLog(@"%ld", sizeof(dd)); //dd是指向字符串常量的字符指针
NSLog(@"%ld", sizeof(*dd)); //*dd是第一个字符 (所占大小由数据类型决定)

答案:

32位机器上运行: 12 14 4 4 1

64位机器上运行: 12 14 8 8 1

运用2:

NSLog(@"%lu,%lu,%lu,%lu",sizeof(char),sizeof(char*),sizeof(char[4]),sizeof((char*)(12)));
NSLog(@"%lu,%lu,%lu,%lu",sizeof(char),sizeof(char*),sizeof(char[0]),sizeof((char*)(12)));

32位机器上运行: 1,4,4,4    64位机器上运行: 1,8,4,8

32位机器上运行: 1,4,0,4    64位机器上运行: 1,8,0,8

数据类型所占字节数:

32位和64位下

相同的:

char --1,   short int -- 2,   int -- 4,  unsingned int  -- 4,   float -- 4, double -- 8 , long long 8,

不同的:

32位下:   char* -- 4 , long -- 4  , unsigned long -- 4 

64位下:   char* -- 8 , long -- 8  , unsigned long -- 8

sizeof 和 strlen 简单的区别:

sizeof是运算符,它计算的是系统分配的空间大小,不是存储数据的大小

strlen是函数,()里面必须是字符串指针或者字符串常量,返回的是/0前面的字符个数。

例子

char dd[10] = "01234";
NSLog(@"%ld,%ld", sizeof(dd),strlen(dd));

输出:10,5

你可能感兴趣的:(C++)