C中数组和指针的区别,求底层数组结构
大家都知道C中数组和指针的结构是有一些区别的
比如
void main(){ int *p = (int *)malloc(25* sizeof(int)); int c[25]; printf("%d\n",sizeof(p)); printf("%d\n",sizeof(c));}#include <stdio.h>#include <stdlib.h>int main(void){ char *str1 = "abcde"; char str2[] = "abcde"; /* str1是字符串指针,是存储在常量区的 ,&str1是一个普通的指向指针的变量,存放在栈区 */ printf("%x\n%x\n", str1, &str1); printf("\n"); /* str2是数组名,是一个局部变量,&str2也是一个局部变量,都存储在栈区 */ printf("%x\n%x\n", str2, &str2); return 0;}
[解决办法]
x86架构,指针的sizeof是4bytes,如果x64上指针的sizeof就不是4了,p是一个指针变量,指向另一片区域,而这个指针变量的size就是4
数组,如果要说它的底层结构其实就是一段内存,c表示数组的首地址,也是这片内存的首地址,如果sizeof(C)得到的就是这片内存size
[解决办法]
c 的指针和数组实质都是指针;
只不过数组是格式化后的指针,可以把int * a:看成是一个int a[1]型的数组。
至于用sizeof获取一个指针的长度,很明显,c是差不多算高级语言,
自身的数据类型的意义就是进行结构化操作,因此,你定义了 int b【3】
sizeof(b)结果自然是12,如果你把这个b在代码传到其他函数中去,在用
sizeof(b)那结果就是4了,原因就是编译器已经不知道他原来的定义格式了。
[解决办法]