指针学习笔记
变量 指针 地址
- 地址是数据(变量)储存的位置,地址也是数据。
- 存放地址的变量叫指针变量,简称指针。
指针变量的大小
- 在 \(32\) 位操作系统上地址用 \(32\) 位二进制整数表示,所以一个指针的大小为 \(4\) 字节;
- 在 \(64\) 位操作系统上地址用 \(64\) 位二进制整数表示,所以一个指针的大小为 \(8\) 字节。
指针的类型
可以有不同类型的指针,对应的地址大小不同,例如可以有int
类型的指针对应 \(32\) 位空间的地址,也可以有char
类型的指针,同理对应 \(8\) 位空间的地址。
指针的声明与使用
对于变量
- 指针的类型为类型名后加上一个
*
号,如int*
; - 取得一个变量的地址可以使用取地址符
&
; - 如果要访问指针指向的空间使用
*
号;
int a=1;
int* aa=&a;
*aa=2;//和a=2一样的功能
对于结构体
- 可以用
.
实现对结构体成员的访问,也可以用->
。形象「箭头」
struct note{
int id;
char w;
}a{1,'a'},b{2,'b'};
int main(){
note* tmp=&a;
(*tmp)=b;//a{2,b}
(*tmp).id=1;//a{1,b}
tmp->w='a';//a{1,a}
return 0;
}
指针的偏移
指针可以和整数进行加减操作,作用是使其指向的地址偏移,具体偏移量与指针类型有关:如int
型指针每加 \(1\) 指针偏移 \(32\) 位,加 \(2\) 偏移 \(2 \times 32 = 64\) 位;对于其他类型同理。
使用指针偏移访问数组
- 数组是一块连续的储存空间,直接使用数组名可以得到数组的起始位置即
arr[0]
的地址。 - 用指针访问数组中的元素时可以通过数组起始地址加上偏移量来访问。
p[4]
和*(p+4)
是访问arr[3]
等价的两种写法。
int main() {
int arr[3]={1,2,3};
int* p=arr;//p指向arr[0]
*p=4;//a{4,2,3}
p=p+1;//p指向arr[1]
*p=5;//a{4,5,3}
p++;//p指向a[2]
*p=6;//a{4,5,6}
}