1、 “常量指针”和“指针常量”
“常量指针”, 它是指针,是指向常量的指针,因此指针本身可以变化,但指针指向的内容不能变化。例如:
“函数指针”:指向函数的指针, 本质上是指针,如int (*func)(int x, int y),声明一个指向函数的指针的变量func,其中函数返回值为int,参数为int和int。 函数指针不能指向不同返回值类型或带不同类型形参的函数。
“指针函数”:返回值为指针的函数, 本质上是函数,如int *func(int x,int y),声明一个返回值为int型指针的函数。
3、 “数组指针”和“指针数组”
“数组指针”: 指向数组的指针,本质上是指针。例如:
“指针数组”: 表示指针的数组,本质上是数组,它的包含的元素是指针。例如:
“常量指针”, 它是指针,是指向常量的指针,因此指针本身可以变化,但指针指向的内容不能变化。例如:
int a;
int const* p; //常量指针,p可以被修改,但*p不能被修改
p=&a; //正确
//*p=9; //错误,编译不能通过
“指针常量”,
它首先是一个常量,然后还是一个指针,即它是
指针的常量,因此指针本身不能变化,但指针指向的内容可以变化。注意:
指针常量必须在定义时初始化!例如:
int a;
int* const p=&a; //指针常量,p不可以被修改,但*p可以被修改。指针常量必须在定义时初始化!
//p=&a; //错误,编译不能通过
*p=9; //正确
2、 “函数指针”和“指针函数”“函数指针”:指向函数的指针, 本质上是指针,如int (*func)(int x, int y),声明一个指向函数的指针的变量func,其中函数返回值为int,参数为int和int。 函数指针不能指向不同返回值类型或带不同类型形参的函数。
“指针函数”:返回值为指针的函数, 本质上是函数,如int *func(int x,int y),声明一个返回值为int型指针的函数。
3、 “数组指针”和“指针数组”
“数组指针”: 指向数组的指针,本质上是指针。例如:
int main()
{
int (*p)[4];//定义一个指针p,它指向一个有4个元素的数组
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
p=&a[0];//p指向数组a第一行的首地址,a[0]是一个有4个元素的数组
for(int i=0;i<12;i++)//输出数组a中的元素
printf("%d ",(*p)[i]);
printf("\n");
return 0;
}
程序输出结果:1 2 3 4 5 6 7 8 9 10 11 12
“指针数组”: 表示指针的数组,本质上是数组,它的包含的元素是指针。例如:
int main()
{
int *p[4];//定义一个数组p,它包含4个指针元素
int a[4]={1,2,3,4};
p[0]=&a[0];
p[1]=&a[1];
p[2]=&a[2];
p[3]=&a[3];
for(int i=0;i<4;i++)//输出数组a中的元素
printf("%d ",*p[i]);
printf("\n");
return 0;
}
程序输出结果:1 2 3 4