32位系統,地址長度是32位(bit),也就是4Byte; 64位系統,地址長度是64位(bit),也就是8Byte函數
運用1:spa
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 1code
64位機器上運行: 12 14 8 8 1orm
運用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,8it
32位機器上運行: 1,4,0,4 64位機器上運行: 1,8,0,8class
數據類型所佔字節數:
數據類型
32位和64位下float
相同的:
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