指针:地址。

计算机中以字节位单位,每个字节都有自己的地址编号。地址编号就叫地址。32位操作系统地址编号有32位,64位操作系统地址编号有64位。
32操作系统:若开辟一个空间保存地址编号,需要开4byte(字节)。

指针:指的是地址

一级指针:

指针变量:用来保存地址的变量
格式: [存储类型] 数据类型 *指针变量名;
int a=10;
int sp=&a;
sp=20; // 通过a变量的地址访问a的值并修改为20
printf(“%d\n”,a);

什么类型的变量定义一个对应类型的指针才能保存变量的地址,正确访问变量内容。

&:取地址。(在变量前加&,取变量地址)
*:三种用法:
1.在数据类型后加,指的是定义指针变量
2.在地址前加
,指的是取对应地址存放的值
3.在行地址前加*,指的是将行地址降级为列地址

二级指针

指向一级指针的指针,保存的是一级指针变量的地址
格式: [存放类型] 数据类型 指针变量名;
int a=10;
int *sp=&a;
int
spp=&sp;

指针的运算

算数运算

+:p+n 指针向地址大的方向移动n个数据
-:p-n 指针向地址小的方向移动n个数据
++:p++ 指针向地址大的方向移动1个数,对p本身改变了
p++:先取值再自加
++p:先自加再取值
—:p—指针向地址小的方向移动1个数据
-:p-q 两指针之间相隔数据元素的个数

关系运算:

  1. **> < >= <= != ==**<br /> 地址大的大于地址小的

赋值运算:

  1. **= += -=**<br /> **不同数据类型之间进行运算无意义**

一维数组地址

内存空间连续开辟

一维数组:

元素个数n
int st[5]={1,2,3,4,5};
i->(0-(n-1))

直接访问元素

  1. st[i] *(st+i)

直接访问元素地址

  1. &st[i] st+i<br /> <br /> 一维数组的数组名是一维数组的首地址,表示的是第一个元素的<br /> 地址。**是一个地址常量。**
  2. 用一级指针间接访问一维数组:**int *p=st;**<br /> **1.间接访问元素内容**<br /> p[i] *(p+i)<br /> **2.间接访问元素地址**<br /> &p[i] p+i

二维数组地址问题

  1. 数组内存空间连续开辟。<br /> <br /> **int st[3][3]={9,8,7,6,5,4,3,2,1};**<br />![二维数组地址.png](https://cdn.nlark.com/yuque/0/2022/png/25815106/1642726664391-a21018a0-0268-4801-a6b3-c1a564ec6c6c.png#clientId=u3e5451f3-d312-4&crop=0&crop=0&crop=1&crop=1&from=ui&height=261&id=u3661623e&margin=%5Bobject%20Object%5D&name=%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84%E5%9C%B0%E5%9D%80.png&originHeight=1778&originWidth=2722&originalType=binary&ratio=1&rotation=0&showTitle=false&size=95384&status=done&style=stroke&taskId=u8a172a3e-65b8-4b5c-aa9c-2a85e914a61&title=&width=400)<br /> 1. 二维数组的数组名是二维数组第一行的地址,是地址常量。<br /> 在行地址前加*,将行地址降为列地址。
  2. **st:**第一行地址<br /> ***st:**第一行第一列的地址 <br /> ***st+1:**第一行第二列的地址<br /> <br /> **st+1:**第二行地址<br /> ***(st+1):**第二行第一列的地址<br /> <br /> 2. 二维数组可以看成由多个一维数组组成,将每一行看成一个一维数组。<br /> 每个一维数组用:<br /> **st[0]、st[1]、st[2]、.....、st[n-1] **<br /> 将二维数组数组名加行下标看成每一行对应一维数组的数组名。 <br /> <br /> 3.数组的行下标为**n**,列下标为**m**:**int st[n][m];**<br /> i-->(0-(n-1)) j-->(0-(m-1))<br /> **1.直接访问元素**<br /> st[i][j]<br />*(*(st+i)+j)<br />*(st[i]+j)<br /> **2.直接访问元素地址**<br /> &st[i][j]<br />*(st+i)+j<br />st[i]+j