#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][7];
int *b = &a[0][0], i;
for (i = 0; i < 21; i++) {
b[i] = i;
}
printf("%d\n", a[1][8]);
return 0;
}
理解误区:这里,a[1][8],8超过了第二维的长度,居然不会编译报错!
因为呢,编译器并没有做越界检查这样的事情哦。即使a[-1][-2]这样的使用方式,也能编译通过。
定义二维数组时,已经确定了两个维度大小分别为3、7,接下来打印的时候a[1][8],只是代表这样一组数学运算1*7+8=15
所以,输出结果是15
宏定义,计算数组元素个数。
#define ARRAY_SIZE(m) sizeof(m)/sizeof(m[0])
理解误区:m是指向数组第一个元素的指针,sizeof(m)不应该等于4吗?!
错!还是好好看看sizeof怎么用的吧(还有跟strlen的对比)
int型,0按为取反,以十进制整型数据输出,结果是什么?
误区:-(2^32-1)
错!0按位取反,结果所有二进制位全为1(补码形式),求原码是-1
关于原码 补码的计算 可以参考深入理解计算机系统额。
enum shit{A=1, B, C, D=2, E, F}
问A~F分别是?1,2,3,2,3,4
干啊,今天才知道这些,是不是有点太晚了。好多问题需要好好总结一下。
目前主要有三点需要好好总结一下:sizeof()、printf格式、指针数组取地址一坨坨。