目录
* 数组是一些相同数据类型的变量组成的集合,其数组名即为指向该数据类型的指针。数组的定义等效于申请内存、定义指针和初始化
* 在对指针取内容之前,一定要确保指针指在了合法的位置,否则将会导致程序出现不可预知的错误
*同级指针之间才能相互赋值,跨级赋值将会导致编译器报错或警告
指针原理
1.指针操作
(1)定义:
int a; //定义一个int型的数据类型
int *p; //定义一个指向int型数据的指针4
int *p; p=&a; / int *p=&a;
(2)对指针p有如下操作方式:
操作方式 举例 解释
取地址 p=&a; 将数据A的首地址赋值给p
取内容 *p; 取出指针指向的数据单元
(通常用于数组)
加 p++; 使指针向下移动1个数据宽度(int 4位 char 1位)
p=p+5; 使指针向下移动5个数据宽度
减 p--; 使指针向上移动1个数据宽度
p=p-5; 使指针向上移动5个数据宽度
2.数组与指针
* 数组是一些相同数据类型的变量组成的集合,其数组名即为指向该数据类型的指针。数组的定义等效于申请内存、定义指针和初始化
例如:
地址 内存
0x4000 0x33
0x4001 0x34
0x4002 0x35
0x4003 ......
char c[ ] = {0x33 , 0x34 , 0x35 };
等效于: 申请内存
定义 char *c = 0x4000;
初始化数字数据
// int a[ ] = {0x33,0x34,0x35};
等效于:
int *a;
a = malloc(3*4);
*a = 0x33;
*(a+1) = 0x34;
*(a+2) = 0x35;
*利用下标引用数组数据也等效于指针取内容。
例如: c[0]; 等效于 : *c;
c[1]; 等效于 : *(c+1);
c[2]; 等效于 : *(c+2);
3.注意事项
* 在对指针取内容之前,一定要确保指针指在了合法的位置,否则将会导致程序出现不可预知的错误
例:空指针、指针(数组)越界、野指针
*同级指针之间才能相互赋值,跨级赋值将会导致编译器报错或警告
取地址& 取地址&
变量 ----------------> 指针 ----------------------> 二级指针
变量 <---------------- 指针 <---------------------- 二级指针
取内容* 取内容*
指针的应用