1. 数组指针
数组指针本质是指针,指针所指向的内容是一个数组。
#include <stdio.h>
int main()
{
int arr[10] = {0};
int (*parr)[10] = &arr; //parr是一个指针,所指向的内容是一个大小为10的整形数组
return 0;
}
2. 指针数组
指针数组本质是数组,数组里存放的元素是指针。
#include <stdio.h>
int main()
{
int a = 0;
int b = 1;
int c = 2;
int* arr[3] = {&a, &b, &c}; //arr收一个大小为3的数组,数组里的元素的指向整形变量的指针
return 0;
}
3. 常量指针
常量指针所指向的内容是常量,不可以被修改,但是常量指针的指向可以修改,即可以将常量指针指向另一个不同的常量。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
const int* p = &a; //p是一个常量指针,指针的值可以改变(指向一个新的对象),但是指针所指向对象的内容不可以改变
// *p = 20; //error, 常量指针所指向对象的值不能改变
p = & b; //常量指针的值可以改变
return 0;
}
4. 指针常量
指针常量是一个指针,这个指针具有常性,即指针常量本身不可以修改(不可以指向另一个新的对象),但是指针常量指向的内容可以修改。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int * const p = &a; //p是一个指针常量,指针的值不能改变(不可以指向新的对象),但是指针所指向对象的值可以改变
*p = 20; //指针常量所指向对象的内容可以改变
// p = & b; //error, 指针常量的值不能改变
}
5. const修饰的二级指针
- const char ** p:p是一个指向常量指针的指针。
- char const ** p:p是一个指向常量指针的指针,等同c于onst char ** p。
- char * const * p:p是一个指向指针常量的指针。
- char ** cosnt p:p是一个二级指针常量。
指针 | 二级指针能否改变 | 一级指针能否改变 | 一级指针所指向的对象能否改变 |
const char ** p | 能 | 能 | 否 |
char const ** p | 能 | 能 | 否 |
char * const * p | 能 | 否 | 能 |
char ** const p | 否 | 能 | 能 |