学习知识,最怕的是冲突性,比如在学习指针之前:
1、int a;
2、printf("%d",sizeof(a));
输出的是整型变量 a 所占的内存空间。
学习指针后:
1、int *p;
2、printf("%d",sizeof(p));
输出的是一个指针变量或者一个指针数据所占的内存空间。
学习数组后:
1、int a[10];
2、printf("%d",sizeof(a));
输出的是一维数组 a 占据的 10 个整型数据的所有空间,单位是字节。
然而,初学者在学习时,教科书一直强调,数组名a是一个常数,代表的是数组的首地址。
你是不是很疑惑,地址数据所占的空间是类型无关的,程序编译成32位代码,就应该占32位,4字节;程序编译成64位代码,就应该占64位,8字节?这是怎么啦?
我认为,这就是1970年,C语言发明时,两个创始人留下的坑,三个臭皮匠才顶一个诸葛亮,他们两个,智慧还是不够(开个玩笑)。
纵然C语言不完美,但不影响其伟大。共性的地方就用类比方法记忆;特性的地方就重点记忆啦,别无他法。
C语言中的坑还很多,以后慢慢道来。