C语言数组和指针的区别
数组和指针在编译器看来的区别在于:数组在符号表里本身就是一个地址,指针在符号表里的内容才是一个地址
例如:
char a[9] = “abcd” 编译器在查找a[1]时,首先在符号表看到a代表了4460地址 然后计算 4460 + i 的地址,找到字符b
char *b = a; 编译器在查找b[1]时,首先在符号表找到b代表了7000地址,然后在7000地址的内容为4460,然后再计算 4460 + i 的地址,再找到符号b
#include<stdio.h>
void print_size(char str[])
{
printf("print size:%d\n",sizeof(str) );
}
int main()
{
char my_arry[100];
char * my_point;
my_point = my_arry;
printf("array:%d\npoint:%d\n",sizeof(my_arry),sizeof(my_point)); // 100,8
print_size(my_arry); // 8,退化为指针,传说这样设计是为了提高效率
print_size(my_point); // 8
}