一个指针在32位的计算机上,占4个字节;一个指针在64位的计算机上,占8个字节。
指针就是地址,地址就是指针。
扩展:
int a = 10; char b = 'b'; short c = 2; long d = 9; float e = 6.29f; double f = 95.0629; int arr[] = { 1,2,3 }; char arrB[] = { '1','2','3' }; char str[] = "hello"; double *p=&f; int *i=&a; NSString *string = @"hello world"; //分别对各个变量使用sizeof运算 NSLog(@"int_a=%d,char_b=%d,short_c=%d,long_d=%d,float_e=%d,double_f=%d,arr=%d,arrB=%d,str=%d,strlen=%d,point_p=%d,point_i=%d,point_string=%d", sizeof(a), sizeof(b), sizeof(c), sizeof(d), sizeof(e), sizeof(f), sizeof(arr), sizeof(arrB), sizeof(str), strlen(str), sizeof(p), sizeof(i), sizeof(string));
结果:
int_a=4,char_b=1,short_c=2,long_d=8,float_e=4,double_f=8,arr=12,arrB=3,str=6,strlen=5,point_p=8,point_i=8,point_string=8
sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。C语言会自动在在双引号""括起来的内容的末尾补上" "代表结束,ASCII中的0号位也占用一个字符。
int占4字节,字符占1字节,指针地址占8个字节
strlen返回的是存储在数组中的字符串的长度,sizeof返回的是数组本身长度,如果没有声明数组大小,即strlen长度+' '结尾
问:假如,我们想通过CPU在内存中读取一个数字3,那么是怎样一个操作呢?
首先,CPU通过地址总线,在内存中找到数字3的地址;
然后,通过控制总线知道该操作是读还是写;
然后,通过数据总线,把数字3传输到CPU中。