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
15int 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
13int main() {
int var1 = 10, var2 = 20;
// 声明一个常量指针
const int *ptr = &var1;
// 通过指针试图改变var1的值将导致编译错误
// *ptr = 15; // 错误
// 可以改变指针指向的地址
ptr = &var2; // 正确
return 0;
}根据写法记命名方式
int * const a
*在前,const在后,所以叫做指针常量int const * a
const在前,*在后,所以叫做常量指针根据const修饰的对象记住对应的特性
我们都知道const修饰的变量称为常量,常量具有不可变的性质,在指针常量和常量指针中也是一样,只要关注是什么对象被const修饰即可。int * const a
const修饰是a,在这a为地址,所以地址不可变,地址不可变在变量的角度就是a的指向不能修改,但*a是可以修改的,所以a指向的值可以修改。int const * a
const修饰的是*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;
}