数组名与指针的关系
数组名代表数组中第一个元素的地址。例如int arr[5]中,arr等同于&arr[0],类型为int*。但&arr的类型是int(*)[5],指向整个数组的指针。
指针数组与数组指针
指针数组:本质是数组,元素为指针。例如int* arr[4]表示包含4个int*元素的数组。
数组指针:本质是指针,指向数组。例如int(*q)[3]表示指向包含3个int元素的数组的指针。
字符数组与指针运算
char str[] = "hello";
str+1:char*类型,指向'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 大端
&spm=1001.2101.3001.5002&articleId=152815711&d=1&t=3&u=97359fb3b3eb49b7a912c61f6b59a25f)
3778

被折叠的 条评论
为什么被折叠?



