C/C++ 指针XX/XX指针
指针数组 数组指针
- 指针数组
 写法:int* array[]
 特性:是一个数组,数组内容存放着指针1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18int main() { 
 // 定义一个整型指针数组,每个元素都可以指向一个整数
 int* ptrArray[3];
 int var1 = 10, var2 = 20, var3 = 30;
 
 // 让指针数组的元素指向这些变量
 ptrArray[0] = &var1;
 ptrArray[1] = &var2;
 ptrArray[2] = &var3;
 
 // 访问并打印指向的值
 for(int i = 0; i < 3; i++) {
 printf("Value of var%d = %d\n", i+1, *ptrArray[i]);
 }
 
 return 0;
 }
- 数组指针
 写法:int (*array)[]
 特性:是一个指针,指向一个数组1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13int main() { 
 // 定义一个整型数组
 int arr[3] = {10, 20, 30};
 // 定义一个指向包含3个整型元素数组的指针
 int (*ptrToArray)[3] = &arr;
 
 // 通过数组指针访问数组元素
 for(int i = 0; i < 3; i++) {
 printf("Value of arr[%d] = %d\n", i, (*ptrToArray)[i]);
 }
 
 return 0;
 }
指针常量 常量指针
- 指针常量 
 写法:- int * const a
 特性: 指针的指向不可以改变,但指针指向的值可以改变,即 *a=10 是允许的,a=&b则不允许- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- int main() { 
 int var1 = 10;
 int var2 = 20;
 // 声明一个指针常量
 int* const ptrConst = &var1;
 // 可以通过指针常量修改其指向地址的值
 *ptrConst = 15; // 正确
 // 试图改变指针指向的地址将导致编译错误
 // ptrConst = &var2; // 错误
 return 0;
 }
- 常量指针 
 写法:- int const * a
 特性: 指针的指向可以改变,但指针指向的值不可以改变,即 a=&b 是允许的,*a=10则不允许- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13- int main() { 
 int var1 = 10, var2 = 20;
 // 声明一个常量指针
 const int *ptr = &var1;
 // 通过指针试图改变var1的值将导致编译错误
 // *ptr = 15; // 错误
 // 可以改变指针指向的地址
 ptr = &var2; // 正确
 return 0;
 }
- 根据写法记命名方式 - int * const a*在前,const在后,所以叫做指针常量- int const * aconst在前,*在后,所以叫做常量指针
- 根据const修饰的对象记住对应的特性 
 我们都知道const修饰的变量称为常量,常量具有不可变的性质,在指针常量和常量指针中也是一样,只要关注是什么对象被const修饰即可。- int * const aconst修饰是a,在这a为地址,所以地址不可变,地址不可变在变量的角度就是a的指向不能修改,但*a是可以修改的,所以a指向的值可以修改。- int const * aconst修饰的是*a,所以*a不允许修改,但a本身没有const修饰,是允许修改的,所以指针本身可以修改,但指针指向的值不可以修改。
指针函数 函数指针
- 指针函数
 写法:int * func()
 特性: 指针函数实际上是一个函数,只不过返回值是一个指针,返回的指针可以是指向任何类型的指针,比如整型、字符型或者是结构体和数组的指针。1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15// 一个返回整型指针的函数 
 int* getPointerTo(int number) {
 static int temp;
 temp = number;
 return &temp; // 返回局部静态变量的地址
 }
 int main() {
 // 在这里,func是一个指针函数
 int *ptr = getPointerTo(5);
 
 printf("Value is: %d\n", *ptr);
 return 0;
 }
- 函数指针
 写法:int (*funcptr)(...) = func
 特性: 函数指针是指向函数的指针,它可以用来调用函数、传递函数地址等。函数指针通常用于回调函数中,它可以让函数像变量一样复制使用,使程序更灵活。1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13int add(int a, int b) { 
 return a + b;
 }
 int main() {
 // 声明一个函数指针,并使其指向add函数
 int (*funcPtr)(int, int) = add;
 
 // 使用函数指针调用函数
 int sum = funcPtr(2, 3);
 printf("Sum is: %d\n", sum);
 return 0;
 }
