首页 > 其他 > 详细

指针习题

时间:2021-04-12 22:08:38      阅读:31      评论:0      收藏:0      [点我收藏+]
第一题:

求以下输出结果

int main() {
    int a[5] = { 1,2,3,4,5 };
    int *ptr = (int *)(&a + 1);
    printf("%d,%d", *(a + 1), *(ptr - 1));
    return 0;
}

输入结果
技术分享图片

第二题:

struct Test {
    int Num;
    char* pcName;
    short sDate;
    char cha[2];
    short sBa[4];
}*p;
//假设p的值为Ox100000,如下表表达式的值分别是多少?
//已知,结构体Test类型的变量大小是20个字节
int main() {
  p = (struct Test*)0x100000;
    printf("%p\n", p + 0x1);
    printf("%p\n", (unsigned long)p + 0x1);
    printf("%p\n", (unsigned int*)p + 0x1);
    return 0;
}

输出结果

技术分享图片

解析
技术分享图片

指针加减整数的运算,取决于指针类型。

第三题:

int main() {
    int a[4] = { 1,2,3,4 };
    int *ptr1 = (int *)(&a + 1);
    int *ptr2 = (int*)((int)a + 1);
    printf("%x,%x", ptr1[-1], *ptr2);
    return 0;
}

输出结果
技术分享图片
16进制前面的0可以省略
解析

技术分享图片

第四题:

int main() {
    int a[5][5];
    int(*p)[4];
    p = a;
    printf("%p%d\n", &p[4][2] - &a[4][2], &p[4][2].&a[4][2]);
}

输入结果:
技术分享图片

解析:

技术分享图片

第五题:


int main() {
    int a[3][2] = { (0,1),(2,3),(4,5) };
    int *p;
    p = a[0];
    printf("%d", p[0]);
    return 0;
}

输出结果:

技术分享图片

注意 :二维数组中是逗号表达式,所以a[3][2]={1,3,5}.

指针习题

原文:https://blog.51cto.com/u_15100290/2701669

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!