一.指针的定义
1.变量的访问方式
- 直接访问:通过变量名来进行访问
- 间接访问:通过指针去访问数据
2.内存地址与指针
变量的地址值,即其在内存中的地址,其实就是指针,不过要记住一点,当该变量在内存中有多个地址值时,一般只会取其的最前面的值作为指针。

3.指针变量
(1)定义
记录指针地址值的变量就称为指针变量
(2)格式
定义指针变量时用来表示指针变量的
*
只在定义时作标识作用,后继使用指针变量直接以*
后加的标识符代表指针变量即可例如:
int *p = &i
,下面要调用这个指针变量,就用p
表示即可,再加*
就成取值了。
参数:
- 数据类型:与指针指向的变量的数据类型一致
- 字符
*
,类似一个标识符,用于告诉编译器这是一个指针变量 - 指针变量名: 任意取
- 初始化地址值:使用取址符号
&
获取
格式:
数据类型 *指针变量名 [=初始地址值];
例子:
int i = 100;
int *pointer = &i;
4.指针的运算
(1)取址运算符: &
Ⅰ.作用
取出指定变量在内存中的地址值
Ⅱ.格式和占位符
格式:&变量
占位符:%p
Ⅲ.例子
int num = 10;
printf("num = %d\n", num); // 输出变量的值。 num = 10
printf("&num = %p\n", &num); // 输出变量的内存地址。&num = 00000050593ffbbc
(2)取值运算符: *
Ⅰ.作用
用来把指针变量指向的值解析出来
Ⅱ.格式
区别于定义指针变量时的
*
,这里的*
是一个运算符
*指针表达式
Ⅲ.例子
例如下面的p指针变量指向的是a变量的指针,此时使用取值运算符,就可以得到a指针所指向的值了
p指针变量本身记录的其实就是一个地址值,通过*
解析后,就获得了其指向的值
int main() {
int a = 2024;
int *p;
p = &a;
printf("%p\n",&a); //0000005cc43ff6d4
printf("%p\n",p); //0000005cc43ff6d4
printf("%d\n", *p); //2024
return 0;
}
(3)用指针变量修改值
(4)指针与整数的加减运算
① 概述
数据类型占多少字节,每单位就移动多少字节
指针与整数的加减运算,表示是指针所指向的内存地址的移动整数就是移动的单位(字节)而这个移动的单位与其指向的数据类型有关
② 注意点
- 只有指向连续的同类型数据区域,指针加、减整数才有实际意义
例如数组:对指针的加减就相当于改变索引,使其指向下一个数据
③ 格式:
格式:指针±整数
范例:
int类型占用内存为4字节,*h+1
相当于向前移动了4个字节
int p = 1;
int *h = &p;
*h+1;//相当于向前移动了四个字节
④ 例子
尝试使用指针整数加减的方式改变索引,间接实现遍历数组的目的
#include
#define LENGTH 5
int main() {
int arr[LENGTH] = {10,20,30,40,50};
//方式1:传统直接访问的方式
for(int i = 0;i < LENGTH;i++){
printf("%d ",arr[i]);
}
printf("\n");
//方式2:使用指针访问
int *p = &arr[0];
for(int i = 0;i < LENGTH;i++){
printf("%d ",*(p+i));
}
return 0;
}