C语言:指针与数组关系简述(含面试题)

数组名与指针的关系

数组名代表数组中第一个元素的地址。例如int arr[5]中,arr等同于&arr[0],类型为int*。但&arr的类型是int(*)[5],指向整个数组的指针。

指针数组与数组指针

指针数组:本质是数组,元素为指针。例如int* arr[4]表示包含4个int*元素的数组。
数组指针:本质是指针,指向数组。例如int(*q)[3]表示指向包含3个int元素的数组的指针。

字符数组与指针运算

char str[] = "hello";
 
  • str+1char*类型,指向'e',地址偏移1字节。
  • &str+1:指向整个数组后的地址(即'\0'后),类型为char(*)[6]
  • (char*)(&str+1)[-2]:先计算&str+1指向数组末尾,再通过[-2]回退到'l'的位置。

过程:

char str[]="hello";
str+1 char*类型+1 只加一个字节
&str+1 指向"\0"
(char*)(&str+1)[-2]
先&str+1 走了[]到0x7,然后再强转为char*类型,再-2
1.定义一个数组指针p指向srr----->short(*p)[2]=&srr;
  p与&srr指向 
2.定义一个指针q指向&irr+1位置,且q指针+1偏移量 偏移2字节
  int(*q)[4]=&irr+1;//q偏移16B
  short *q=(short*)(&irr+1);
3.假设&val是0x19;int val=0;
                             类型                                                     地址/值
(char*)val+1;        char*                                      val->0 (char*)0+1->[0x00000001]
(char*)&val+1;      char*                                     &val+1->0x19+sizeof(char)偏移量结果[0x1a]
*&val+1;               int                                           0+1 ->[1]
(short)&val+1;      0x19强转short类型 整型值     [0x1a]
(short*)&val+1;     short*                                     0x19地址基础 偏移量2B位置:[0x1b]
&val+1;                int*                                          0x19地址 偏移量4B:[0x1d]
4.面试题:
  数据在内存中存储模式
  ①解释什么是存储模式:
    字节序:小端字节序(低低/高高)        大端字节序(低高/高低)
    小端:低位数据 存储 低地址位置 
          0x78  0x56 0x34 0x12
        低地址             高地址
    大端:低地址位置存储高位数据
          0x12  0x34 0x56 0x78
        低地址             高地址
  ②如何验证平台存储模式? 指针验证/联合体验证
  int val=0x12345678;
  char* p=(char*)&val;
  if(*p==0x78)小端
  else 大端

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值