指针和数组面试题

指针面试题

前提概要
总结 数组名的意义

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址

笔试题1:

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

在这里插入图片描述

输出的结果是2 5

笔试题2:

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

%p是打印地址
p是结构体指针,+1跳过整个结构体指针,也就是20个字节
20转化为16进制
第一个printf——0x100014
强制转换为unsigned long——整型值+1> ±整数直接加减就行
第二个printf——0x100001
强制转换为unsigned int——无符号整型指针,跳过四个字节
第三个printf——0x100004

笔试题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 <stdio.h>
int main()
{
   
   
 int a[3][2] = {
   
    (0, 1), (2, 3), (4, 5) };
 int *p;
 p = a[0];
 printf( "%d", p[0]);
 return 0;
}

注意是逗号表达式
打印结果是1

笔试题5:

int main()
{
   
   
 int a[5]
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值