数组与指针

一、指针修饰符

1、const常量化:只能读,不能被修改。

用法:const int a=10;//此时a不能再被直接修改。

但是,可以通过地址来对a进行修改,例如:

const int a=10;

int *p=&a;

*p=20;

此时,输出的a就成了20。

二、大小端

大端存储:在低地址存储高位数据,在高地址存储低位数据

小端存储:在高地址存储高位数据,在低地址存储低位数据

如何验证自己的计算机是大端存储还是小端存储?

解:

int a=0x12345678;

char b=a;

这里由于int 类型与char 类型字节大小不同,使得char 只能显示一个int 中的字节,所以可以由此判断,结果如下图:

三、二级指针

用来存储一级指针的地址。

格式:存储类型 数据类型 **指针变量

图解如下:

a的值10存在了地址0x100中;

指针变量p存储的是a的值10的地址,a的值10的地址的地址为0x200;

q存储的是p存储的a的值10的地址的地址,q存储的是p存储的是a的值10的地址的地址的地址为0x300。

四、数组指针

1、指针与一维数组

访问数组的元素a[i]的值:

直接:a[i] *(a+i)

间接:p[i] *(p+i)

访问数组的元素a[i]的地址:

直接:&a[i] a+i

间接:&p[i] p+i

2、指针与二维数组

访问a[i][j]的值:

直接:a[i][j] *(*(a+i)+j) *(a[i]+j)

间接:p[i][j] *(*(p+i)+j) *(p[i]+j)

访问a[i][j]的地址:

直接:&a[i][j] *(a+i)+j a[i]+j

间接:&p[i][j] *(p+i)+j p[i]+j

五、指针数组

本质上还是数组,但是存储的是指针变量。

1、存储普通变量地址

int a=10, b=20 ,c=30;

int *p[3]={&a,&b,&c};

访问:10 ---> p[0]----> *p[0]    **p

30  :  *p[2]      *(*(p+2))

2、存储二维数组的每一行第一列的地址

int a[2][3]={1,2,3,4,5,6};

int *p[2]={a[0],a[1]};

访问:

地址:第一行第二个元素的地址:p[0]+1   *p+1

          第一行第二个元素的地址:*(p[0]+1)   *(*p+1)

          第二行第三列地址:p[1]+2 *(p+1)+2

3、存储字符串

char *p[3]={"123","hello","hqyj"}
char str[32]
printf("%s",str)   
打印 hello: p[1]     *(p+1)//单独一个p为指针数组的第一个元素的地址,+1则是第二个元素
打印字符:*(p[0]+1)    *(*p+1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值