int a; int* a; int** a; int (*a)[]; int (*a)(int)

红太狼 2023-10-02 11:02 28阅读 0赞

a) int a;表示一个内存空间,这个空间用来存放一个整数(int);
b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间;
c) int** a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间;
d) int (*a)[4];表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个长度为4、类型为int的数组;和int** a的区别在于,++、+=1之后的结果不一样,其他用法基本相同。
以上四种类型见上图表示。
e) int (*a)(int);表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个函数,这个函数有一个类型为int的参数,并且函数的返回类型也是int。

重点:

int *p[]和int (*p)[]

前者是指针数组,后者是指向数组的指针。更详细地说。

前: 指针数组;是一个元素全为指针的数组.
后: 数组指针;可以直接理解是指针,只是这个指针类型不是int也不是char而是 int [4]类型的数组.(可以结合函数指针一并看看……)

int*p[4]———p是一个指针数组,每一个指向一个int型的
int (*q)[4]————-q是一个指针,指向int[4]的数组。

定义涉及两个运算符:“*”(间接引用)、“[]”(下标),“[]”的优先级别大于“*”的优先级别。

首先看int *p[4],“[]”的优先级别高,所以它首先是个大小为4的数组,即p[4];剩下的“int *”作为补充说明,即说明该数组的每一个元素为指向一个整型类型的指针。int *p[4]的存储结构如下:(存储方格横向排列或竖向排列没区别,只要按内存地址顺序排列就行,此处只是为画图方便)

0_1320813191ifpt.gif

再看int (*q)[4]。它首先是个指针,即*q,剩下的“int [4]”作为补充说明,即说明指针q指向一个长度为4的数组。int (*q)[4]的存储结构如下:

0_1320813196RxlN.gif

请看以下定义:

int a[2][4]={ {2,5,6,8},{22,55,66,88}};

int c[4]={5,8,9,4};

int d[3]={23,12,443};

int *p[4],(*q)[4];

q=a;

*p=c;

*(p+1)=d;

则int *p[4]和int (*q)[4]的存储数据为:

0_1320813201Hw1W.gif

0_1320813205Ef04.gif

验证:







 






#include <stdio.h>

int main(void)

{

    int a[2][4]={ {2,5,6,8},{22,55,66,88}};

    int c[4]={5,8,9,4};

    int d[3]={23,12,443};

    int p[4],(q)[4];

    q=a;

    p=c;

    (p+1)=d;

    int i,j;

    for(i=0;i<2;i++)

        for(j=0;j<4;j++)

       {

           if((i==1)&&(j==3)) break;

           printf(“((p+%d)+%d)=%d\n”,i,j,((p+i)+j));

       }

    puts(“===============”);

    for(i=0;i<2;i++)

       for(j=0;j<4;j++)

           printf(“((q+%d)+%d)=%d\n”,i,j,((q+i)+j));

   return 0;

}

 

输出结果为:

((p+0)+0)=5

((p+0)+1)=8

((p+0)+2)=9

((p+0)+3)=4

((p+1)+0)=23

((p+1)+1)=12

((p+1)+2)=443

===============

((q+0)+0)=2

((q+0)+1)=5

((q+0)+2)=6

((q+0)+3)=8

((q+1)+0)=22

((q+1)+1)=55

((q+1)+2)=66

((q+1)+3)=88

转载于:https://www.cnblogs.com/xiaojingang/p/4451089.html

相关资源: (int)a:与(int&;)a_(int)-专业指导文档类资源-CSDN文库

发表评论

表情:
评论列表 (有 0 条评论,28人围观)

还没有评论,来说两句吧...

相关阅读

    相关 int *p=aint *p=&a的区别

      指针变量用来存放指针(或者可以理解成地址)。而 & 则是取地址运算符,因此给指针变量赋值的方式一般是把变量的地址取出来,然后付给对应类型的指针变量: int a;