zoukankan      html  css  js  c++  java
  • 指针的类型与指针所指向的类型

      指针的类型和指针所指向的类型很明显是不一样的东西,但好多情况下却容易忽视它们的区别。指针的类型是指针自身的类型,而指针所指向的类型是指针指向的数据(内存)的类型。

    指针的类型

      从语法上来看,我们只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。如:

    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] = i相当于要将int强制转换成int *类型,这当然不行(p[i] = (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就变成不可更改的左值了)。

  • 相关阅读:
    poj 1655 Balancing Act 树的重心
    poj 1985 Cow Marathon 树的直径
    hdu 4607 Park Visit 求树的直径
    hdu 1548 A strange lift 宽搜bfs+优先队列
    poj 2711 Leapin' Lizards && BZOJ 1066: [SCOI2007]蜥蜴 最大流
    poj 2449 Remmarguts' Date K短路+A*
    hdu 1285 确定比赛名次 拓扑排序
    hdu 3061 Battle 最大权闭合图
    hdu 3879 Base Station 最大权闭合图
    poj 2987 Firing 最大权闭合图
  • 原文地址:https://www.cnblogs.com/xiehongfeng100/p/4733045.html
Copyright © 2011-2022 走看看