C语言 指针笔记

  1. 基本知识:
  • 内存区域中每字节都对应一个编号,这个编号就是“地址”。
  • 程序中定义一个变量,编译时,系统会为其分配内存单元。
  • 按变量地址存取变量值的方式称为“直接访问”。如:
    printf("%d",a); scanf("%d",&a);
  • 将变量 a 的地址存放到变量 b 的内存中,通过 b 内存中的地址访问 a 的值,就叫“间接访问”。
  • 访问变量地址时,包括谈到变量地址,都是指其起始地址。例如 int 型变量占4个字节,那么每个字节都有一个地址,指的就是第一个字节的地址。
  • C中,指针变量用于存放变量的地址。

指针与指针变量是两个定义:
一个变量的地址称为该变量的“ 指针 ”。一个变量专门用来存放另一变量的地址(即指针),那么称它为““指针变量”。

  1. 指针变量的定义与初始化

数据类型 *指针变量名;

int *p;  // p 才是指针变量名

int b = 6;
int *a = &b; //指针变量初始化:某个变量取地址赋给指针变量,注意类型要一致

int *m; //先定义,再初始化
m = &b;
printf("*m = %d",*m);  //输出 *m = 6  --- 间接访问
printf("b = %d",b);  //输出 b = 6  --- 直接访问

指针变量所占字节(按上述例子,int型指针):
64位应用程序,是 8 个字节;32位应用程序,是 4 个字节。(注意题目中有没有强调程序是32位的)

  1. 指针运算符中的“取地址操作符”、“取值操作符”
  • 取地址操作符为 &,也叫 “引用”,通过取地址操作符 & ,可获取变量的地址值;
  • 取值操作符为 * ,也称 “解引用”,通过该操作符可得到一个地址对应的数据。

两个运算符优先级相同,但都要从右向左结合

int a = 66;
int *v = &a; // int *v;  v = &a;

&*v 等同于 &a,都表示 a 的地址。
*&a 等同于 a,表示变量 a 的值。

  1. 使用场景
  • 指针传递
  • 指针偏移
    指针可以进行加减运算,且只能进行加减计算,叫做指针偏移。
    编译器编译时,数组取下标操作就是通过指针偏移来完成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俺要工作俺想工作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值