“常量指针”和“指针常量”

1、 “常量指针”和“指针常量”
      “常量指针”
它是指针,是指向常量的指针,因此指针本身可以变化,但指针指向的内容不能变化。例如:
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

你可能感兴趣的:(“常量指针”和“指针常量”)