0
点赞
收藏
分享

微信扫一扫

令人混淆的数组指针加法运算


int a[3] = { 1, 2, 3 };
int (*p)[3] = &a; // 赋值正确,p保存指向a的指针,是一个二维指针
p++; // 指针跑飞
*((*p) + 1) = 10; // stack smashing
int b[2][3] = { { 1, 2, 3 }, { 1, 2, 3 } };
int (*p1)[3] = b; // 赋值正确,p1保存指向b的指针,是一个二维指针
p1++; // 正确 此时p1指向b[1]即第二维数组
**p1 = 10; // 正确 a[1][0]被设置为10

举报

相关推荐

0 条评论