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