指针笔试题

简介: 指针笔试题

笔试题目一

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代表的是数组首元素的地址 加上一就是代表的2的地址

对其解引用就可以得到2这个元素

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

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

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

所以说 最终的结果是2 5


2a443ed92846486e82963594ff7e2e3b.png


笔试题目二


struct Test
{
 int Num;
 char *pcName;
 short sDate;
 char cha[2];
 short sBa[4];
}*p = (struct Test*)0x100000;
int main()
{
 printf("%p\n", p + 0x1);
 p是一个指针 指针的大小是20 所以这个时候应该是加上20 变成0x100014
 printf("%p\n", (unsigned long)p + 0x1);
 这里是变成一个整型 实际上加上的数字就是1 所以应该变成0x100001
 printf("%p\n", (unsigned int*)p + 0x1);
 这里变成一个int类型的指针 所以应该变成 0x100004
 return 0;
}


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


答案如下

fbe2afca17804160a60e8f84ef72ff5a.png


笔试题目三


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;
}


要求上面代码输出的结果


d7ba7924c01d49d8ba011a77290a1edd.png


这个时候指针指向的00 我们读取一下这个数据的内存

答案应该是02 00 00 00


笔试题目四


要求以下程序的输出结果


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


笔试题目五


int main()
{
    int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int *ptr1 = (int *)(&aa + 1);
    这里取地址代表拿到的是一整个数组的地址 加上一就到十的后面 后面减取一之后指向的就是十
    int *ptr2 = (int *)(*(aa + 1));
    这里首先aa是首元素地址 再二维数组中就是第一行的地址 加上1之后变成
    printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0;
}


所以说 输出的结果是十 五


559fdc64430049198c9710f796f17afc.png


笔试题目六


int main()
{
  char* a[] = { "work","at","alibaba" };
  char** pa = a;
  pa++;
  printf("%s\n", *pa);
  return 0;
}


这里首先a是一个指针数组


里面的每一个元素其实都是一个指针


用pa来接受a这个数组的首元素地址 其实也就是work的地址


pa++之后 指向at 这个指针


所以说打印出来的结果是at


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

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

热门文章

最新文章