指针变量
指针变量是存放地址的变量
指针变量需要区分类型,跨度不一样
int *p
// 这里*是标识符,告诉系统这是一个指针变量,用来保存地址
printf("%d\n", *p)
// 这里*是取值运算符,把内存地址p里的数据取出来
数组的首地址就是数组首个元素的地址
数组名就是数组的首地址
int arr[3] = {1, 2, 3};
int *p;// 8个字节表示一个地址
p = arr;
p = &arr[0];
p+1
,偏移一个类型的字节数
二维数组
父子数组\
int a[3][4] = {{1,2,3,4},{5,2,3,4},{1,2,6,4}};
a
是二维数组名,是父数组地址
a[0]
是一维数组的名,是子数组的地址
a[0]+1 = *(a+0)+1
数组指针
用指针表示数组
一维数组
int a[3] = {1,2,3};
int *p;
p = a;
二维数组
int arr[3][4] = {{1,2,3,4},{5,2,3,4},{1,2,6,4}};
// 数组指针
int (*p)[4];
p = arr;
函数指针
如果在程序中定义了一个函数,在编译时,编译系统为这段函数分配了一段地址空间,这段地址空间的起始地址(入口地址)称为这个函数的指针
函数名就是地址
定义一个函数指针变量
void (*p)(int a, int b)
{
}
应用演示
void pri(){
printf("1");
}
int main(){
void (*p)();// 定义一个函数指针变量
p = pri;// 指向函数
pri();
(*p)();// 调用
return 0;
}
指针数组
一个数组内元素都是指针类型
int *p[4];
二级指针
改指针变量的定义时用到