评论

收藏

[C++] 指针的类型与指针所指向的类型

编程语言 编程语言 发布于:2021-07-31 11:48 | 阅读数:324 | 评论:0

指针的类型和指针所指向的类型很明显是不一样的东西,但好多情况下却容易忽视它们的区别。指针的类型是指针自身的类型,而指针所指向的类型是指针指向的数据(内存)的类型。
指针的类型从语法上来看,我们只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。如:
1 int *ptr;     //指针的类型是 int*
2 char *ptr;    //指针的类型是 char*
3 int **ptr;    //指针的类型是 int**
4 int (*ptr)[3];  //指针的类型是 int(*)[3]
5 int *(*ptr)[4];   //指针的类型是 int*(*)[4]
指针所指向的类型从语法上来看,我们只要把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。 如:
1 int *ptr;     //指针所指向的类型是 int
2 char *ptr;    //指针所指向的的类型是 char
3 int **ptr;    //指针所指向的的类型是 int*
4 int (*ptr)[3];  //指针所指向的的类型是 int()[3]
5 int *(*ptr)[4];   //指针所指向的的类型是 int*()[4]
一些小案例
案例1
请看小程序:
1 int *p[3];
2 for (int i = 0; i < 3; i++)
3 {
4   p[i] = i;
5 }
实际上这个小程序是有问题的。我们定义了一个指针数组,数组里的每个元素存储的都是指针。所以p = i相当于要将int强制转换成int *类型,这当然不行(p = (int *) i 就可以)。
可把程序修改如下:
1 int *p[3];
2 for (int i = 0; i < 3; i++)
3 {
4   p[i] = new int(i);
5 }
案例2
请看小程序:
1 int (*p)[3];
2 p = new int[][3];
3 for (int i = 0; i < 3; i++)
4 {
5   (*p)[i] = i;
6 }
上边程序的int (*p)[3]其实相当于int p[3](注意这时p就变成不可更改的左值了)。


关注下面的标签,发现更多相似文章