结构体指针数据 指针数组 数组指针

1、结构体指针

struct h
{
BTNode *TQ;
int level;
}a[100], b, *c[3],  *d;

 
a是一个结构体数组,已经有100个节点了。不需要再分配空间了。
b是一个结构体变量,也已经有空间了,就和int b;已经有空间了一样。
c是一个指针数组,c也已经有空间了,有3个元素,但是这三个元素是还没有分配空间的指针,所以要用malloc分别为他们分配内存。
d是一个结构体指针,和int *d;一样还要为他分配内存空间;
其实结构体就可以理解为是一种和int这些一样的数据类型,它在定义变量和指针这方面的操作和基本数据类型是一样的。

结构体指针数组_win9zz的博客-CSDN博客_结构体指针数组

2、指针数组

如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。其一般形式为:

            数据类型    *数组名[常量表达式][常量表达式]...... ;

它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每个元素都是一个指针。

 例如:char *arr[]={“Sunday”,“Monday”},存储了两个指针,第一个指针指向了字符串"Sunday",第二个指针指向了字符串"Monday",而sizeof(arr)=8,因为在32位平台,指针类型大小占4个字节。指针数组最重要的用途是对多个字符串进行处理操作,因为字符指针比二维数组更快更有效。
关于指针数组与数组指针详解(知识点全面)_利刃Cc的博客-CSDN博客_指针数组

3、数组指针(针对二维数组)

注:因为数组指针对于一维数组的使用比较尴尬,对于一维数组,建议使用指针数组比较方便,这里只涉及到关于二维数组与数组指针的知识!!!

首先引入二维数组的定义:二维数组在概念上是二维的,有行有列,但在内存中所有的元素都是连续排列的

关于指针数组与数组指针详解(知识点全面)_利刃Cc的博客-CSDN博客_指针数组

为了能更好地理解数组指针,与普通指针及二级指针的区别,下面举例说明一下。

例如:

{

 int a[4][5];

    int (*p)[5]=a;

}

这里a是个二维数组的数组名,相当于一个二级指针常量;//二维数组名与二级指针毫无关系(初学者常常混淆)。

p是一个指针变量,它指向包含5个int元素的一维数组,此时p的增量以它所指向的一维数组长度为单位;

p+i是一维数组a[i]的地址,即p+i==&a[i];对该式两边作取内容运算(*)得*(p+i)==a[i],由于二维数组中a[i]==&a[i][0],则*(p+i)表示a[i][0]的地址,即*(p+i)==&a[i][0];

*(p+2)+3表示a[2][3]地址(第一行为0行,第一列为0列),*(*(p+2)+3)表示a[2][3]的值。

//(*p)[5]其中的5换成其他的数字在vc++6.0环境中都无法通过编译

(*p)[5]其中的5在上述例子中没有表示任何意思你可以换成除0以外的整数,[5]的作用就是帮助你记忆说你所指向的一维数组的长度。(不过除了与定义的二维数组的长度一致的不会警告之外 )其他的数会警告但是不影响结果。

猜你喜欢

转载自blog.csdn.net/luyao3038/article/details/128313731