学习C的过程中,指针可真的令人头秃。。还好我秀发茂密哈哈哈哈哈哈。。不过多理解,多练习,我相信这也不是什么大问题。可惜我还在理解阶段,记录一下我学习理解的内容。
目录
- 指针的定义和类型
- 指针数组
- 数组指针
- 数组传参和指针传参
- 函数指针
- 函数指针数组
- 指向函数指针数组的指针
- 回调函数
one.指针的定义和类型
1.指针的定义:在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。
以上360百科上的解释。总结来说:指针就是个变量,用来存放地址的变量。通过指针可以找到以它为地址的内存单元。再进一步说,指针是地址。指针变量的地址存在二级指针。
int a = 10;
int* pa = &a;
int** ppa = &pa;
2.指针大小:在32位平台是4个字节,在64位平台是8个字节。
3.指针类型:int*类型的指针是为了存放int类型变量的地址。char*、float*......道理都一样。
既然指针存在类型的区分,那么一定有它的意义。①确定了解引用操作访问几个字节。②指针类型决定了指针向前或向后走一步走多大距离。 意义②似乎有点难理解,下面这段代码解释一下:
#include <stdio.h>
int main()
{
int n = 10;
char* p1 = (char*)&n;
int* p2 = &n;
printf("%p\n", p1);
printf("%p\n", p1+1);
printf("%p\n", p2);
printf("%p\n", p2+1);
return 0;
}
运行结果是:
指针变量p1的类型是char*,加一走一个字节。p2是int*类型,加一走四个字节。
two.指针数组
问题来了,指针数组是指针还是数组??指针数组是数组 是存放指针的数组。
int* arr[3];表示arr这个数组有3个元素,每个元素是一个整形指针。
three.数组指针
那么,数组指针当然是指针啦,它指向数组。
int (*p)[10];因为[]的优先