×

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

结构体指针数组与结构体数组有什么不同?结构体指针数组问题

admin admin 发表于2022-07-11 03:31:00 浏览115 评论0

抢沙发发表评论

结构体指针数组与结构体数组有什么不同


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

比如:
struct name {
int data;
} na;
int ia;
这里的na是类型struct name;的一个变量。而ia是int类型的一个变量。
struct name* np;
int* ip;
这里的两个指针也是一样的,只是类型不同。
可以这样分配内存。
1. np = &na ip = &ia
2, np = (struct name*)malloc(sizeof(struct name));
ip = (int*)malloc(sizeof(int));

声明数组也是一样的。
比如:
struct name nArray;
int iArray;
iArray就是有100个int型的变量。
nArray也是一样的有100个struct name 这种类型的变量。

指针数组也是一样的。
struct name* npArray;
int* ipArray;
ipArray表示有10个整型的指针。
npArray表示有10个struct name类型的指针。

声明动态数组的方式也是一样的。
struct name* dyNArry;
int* dyIArray;

比如我们要申请100个节点的数组
dyNArray = (struct name*)malloc(100 * sizeof(struct name));
dyIArray = (int *)malloc(100 * sizeof(int));

其实数据结构就是我们自己定义的一种类型。所以在声明变量的时候和基本数据类型(比如:int)是没有什么分别。
如果你觉得struct name的类型名称太长了。你可以用typedef来定义
例如: typedef struct name Name;
以后就直接用Name做类型名称就可以了

结构体指针数组问题


答案是没有区别,因为数组也是一种指针(一个指向数组中第一个对象的指针)。stu《=》*(stu+0),stu《=》*(stu+1)
所以pstu
=
&stu结果pstu指向stu的第一个结构体
pstu
=
stu;结果pstu指向整个stu数组,但数组相当于一个指向第一个结构体的指针,所以pstu还是指向了stu的第一个结构体。
指向数组的第一个对象就相价于指向整个数组(数组其它对象的访问:stu或者*(stu+1))。
这个结论其实适用还于所有类型的数组,即:
int
stu;
int
*pstu;
那么pstu
=
&stu和pstu
=
stu;也是等价的

结构体里定义指针数组,怎么引用


1,使用二级指针。
char**
pp;
struct
division_info
di;
pp
=
di.arr;
//指向arr首个元素所在地址
2,使用一级指针。
char*
p;
struct
division_info
di;
p
=
di.arr;//引用arr中的首个元素。
具体如何使用,需要看应用。
-结构体数组指针