指针笔试题模拟

简介: 指针笔试题模拟

题目一

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

1*(a+1)可以等价于a[1],即第一个打印的是数组第二个下标的元素:2

2 而ptr拿到的是整个数组的地址再加一 所以指向五后面一个元素

而随后又被强转成int类型的指针了 所以移动的范围变成了一个元素

所以说 最后向前移动一位 变成指向元素5

所以说 最终的结果是2 5

运行结果:

题目二

我们首先要明确 0x1是一个十六进制数字1

运行结果:

题目三

int main()
{
    int a[4] = { 1, 2, 3, 4 };
    int *ptr1 = (int *)(&a + 1);
    首先取地址a是取出整个数组的地址 加上1之后指针指向4
    所以说指向4后面一个元素  所以说ptrl{-1}应该是指向4
    int *ptr2 = (int *)((int)a + 1);
    下面这个我们就要画图来解释了
    printf( "%x,%x", ptr1[-1], *ptr2);
    return 0;
}

2.*ptr强制转换成整型 ,a+1即整形加一,内存向后移一位,但又因为是int*类型指针,四个字节计算,所以计算出来为2000000

题目四

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

这个其实是一个逗号表达式 里面真正的内容应该是 1 3 5 0 0 0

输出的结果应该是第一行首元素 应该是1

以上便是本篇所有内容了,如有错误各位大佬不吝赐教,感谢留言

目录
相关文章
|
7月前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
7月前
|
C语言
指针和数组笔试题解析(最详细解析,没有之一)
指针和数组笔试题解析(最详细解析,没有之一)
55 0
|
7月前
|
存储 编译器 C语言
经典指针与数组笔试题——C语言
经典指针与数组笔试题——C语言
|
6月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
7月前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(上)
C语言初阶⑦(指针初阶)知识点+笔试题
44 0
|
6月前
|
存储 C++
有关【指针运算】的经典笔试题
有关【指针运算】的经典笔试题
34 4
指针与数组笔试题解析
指针与数组笔试题解析
|
7月前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(上)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
45 0
|
7月前
进阶指针笔试题
进阶指针笔试题
35 0
|
7月前
|
C语言 C++
C语言:指针运算笔试题解析(包括令人费解的指针题目)
C语言:指针运算笔试题解析(包括令人费解的指针题目)