原来是这个样子的!

#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格式、指针数组取地址一坨坨。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值