DAY2-大厂面试典例题(二)-指针练习篇

大家好,我是枫晨~,拖欠了许久的指针习题终于到来,废话不多说,来看看大厂中考过哪些好玩的笔试题吧

文章目录

  • 一、上半节
    • 上半节答案及解析:
  • 二、下半节
    • 下半节答案及解析:

DAY2-大厂面试典例题(二)-指针练习篇_第1张图片

一、上半节

笔试1

int main()
{
    int a[5] = { 1, 2, 3, 4, 5 };
    int *ptr = (int *)(&a + 1);
    printf( "%d,%d", *(a + 1), *(ptr - 1));
    return 0; 
}
//程序的结果是什么?

笔试2

//由于我还没介绍过结构体,这里告知结构体的大小是20个字节
struct Test
{
 int Num;
 char *pcName;
 short sDate;
 char cha[2];
 short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体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; 
}

笔试3

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; 
}
//分析最后打印的结果

笔试4

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

上半节答案及解析:

笔试1----知识点:数组指针

答案:2,5

详解:

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

DAY2-大厂面试典例题(二)-指针练习篇_第2张图片

笔试2----知识点:指针类型,指针±整数

答案:100014,100001,100004

详解:

struct Test
{
 int Num;
 char *pcName;
 short sDate;
 char cha[2];
 short sBa[4];
}*p;
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; 
}

DAY2-大厂面试典例题(二)-指针练习篇_第3张图片

笔试3—知识点:指针类型权限,大小端

答案:4,2000000

详解:

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

DAY2-大厂面试典例题(二)-指针练习篇_第4张图片

DAY2-大厂面试典例题(二)-指针练习篇_第5张图片

DAY2-大厂面试典例题(二)-指针练习篇_第6张图片

(gif图解)

笔试4 知识点:逗号表达式,二维数组

答案:1

详解:

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

DAY2-大厂面试典例题(二)-指针练习篇_第7张图片


二、下半节

笔试5

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]);
    return 0;
}
//打印结果?

笔试6

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));
    printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0; 
    }
//分析打印结果

笔试7

#include 
int main()
{
 char *a[] = {"work","at","alibaba"};
 char**pa = a;
 pa++;
 printf("%s\n", *pa);
 return 0; 
}
//分析打印结果

笔试8

int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};
 char**cp[] = {c+3,c+2,c+1,c};
 char***cpp = cp;
 printf("%s\n", **++cpp);
 printf("%s\n", *--*++cpp+3);
 printf("%s\n", *cpp[-2]+3);
 printf("%s\n", cpp[-1][-1]+1);
 return 0; 
 }
//分析打印结果

下半节答案及解析:

笔试5 知识点:指针-指针运用,数组指针使用

答案:FFFFFFFC,-4

详解:

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]);
    return 0; 
}

DAY2-大厂面试典例题(二)-指针练习篇_第8张图片

DAY2-大厂面试典例题(二)-指针练习篇_第9张图片

练习6

答案:10,5

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));
    printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
    return 0; }

DAY2-大厂面试典例题(二)-指针练习篇_第10张图片

笔试7

答案:“at”

详解:

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

DAY2-大厂面试典例题(二)-指针练习篇_第11张图片

练习8

答案:POINT
ER
ST
EW

详解:

int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};
 char**cp[] = {c+3,c+2,c+1,c};
 char***cpp = cp;
 printf("%s\n", **++cpp);
 printf("%s\n", *--*++cpp+3);
 printf("%s\n", *cpp[-2]+3);
 printf("%s\n", cpp[-1][-1]+1);
 return 0; }

DAY2-大厂面试典例题(二)-指针练习篇_第12张图片

超详细动图图解:DAY2-大厂面试典例题(二)-指针练习篇_第13张图片

好啦,这次的练习有点烧脑,结合前面指针的知识来理解运用会好很多啦,希望大家收获知识,收获好offer!

c+1,c};
char***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", ++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0; }

DAY2-大厂面试典例题(二)-指针练习篇_第14张图片

你可能感兴趣的:(习题专栏,c语言)