1.指针
1)指针就是个变量,用来存放地址,地址唯一标识一块内存空间;
2)指针的大小是固定的4(8)个字节(32(64)位平台);
3)指针是有类型的,指针的类型决定了指针的+/-整数的步长,指针解引用操作时的权限;
int main()
{
int a = 1;
int* pa = &a;
*pa = 2;
printf("%p\n",&a);
printf("%p\n",pa);
printf("%d\n",a);
return 0;
}
运行结果如下

画图理解

2.二级指针
由于指针变量也是变量,是变量就有地址,那么一级指针变量的地址就是二级指针。
int main()
{
int a = 10;
int* pa = &a;
int** ppa = &pa;
**ppa = 30;//等价于 *pa=30;/ a=30;
printf("%d\n",a); //30
*pa = 20;
printf("%d\n",a); //20
return 0;
}
画图理解


3.指针数组与数组指针
1)指针数组: int * p1[10]
由于[]的优先级高于*,所以p1先于[10]结合成为数组,数组的元素类型为int* ;
指针数组是数组, 数组的每个元素都是指针;
2)数组指针: int (* p2)[10]
由于()的优先级高于[],所以p先和*结合,说明p是一个指针变量,指向一个大小为10的整型数组 ;
指针数组是指针, 能够指向一个数组;
int main()
{
int a[5] = {1,2,3,4,5};
//pa1为指针数组,数组的每个元素为a数组元素的地址
int* pa1[5] = {&a[0],&a[1],&a[2],&a[3],&a[4]};
//pa2为数组指针,指针指向数组a
int (*pa2)[5] = &a;
return 0;
}
让我们练习下,解释下面代码的意思
int arr[5]; //长度为5的整型数组
int* parr1[10]; //parr1为指针数组,数组大小为10,元素类型是指向整型的指针
int (*parr2)[10]; //parr2为数组指针,指针指向一个大小为10的整型数组
int (*parr3[10])[5];//parr3为数组,数组大小为5
//元素类型是:大小为10且元素类型是指向整型的指针的指针数组
本文详细解析了C语言中指针的基本概念,包括指针变量的定义与使用、二级指针的理解、指针数组与数组指针的区别及应用。通过实例代码帮助读者掌握指针的复杂用法。
845

被折叠的 条评论
为什么被折叠?



