结构体指针数组与结构体数组有什么不同?
structh{BTNode*TQ;intlevel;?}a[100],b,*c[3],*d;谁能告诉我a,b,c,d的不同之处啊?还有malloc什么情况下必须使用?谢...
struct h
{
BTNode *TQ;
int level; ?
}a[100],b,*c[3],*d; 谁能告诉我a,b,c,d的不同之处啊?还有malloc什么情况下必须使用?谢谢! 展开
{
BTNode *TQ;
int level; ?
}a[100],b,*c[3],*d; 谁能告诉我a,b,c,d的不同之处啊?还有malloc什么情况下必须使用?谢谢! 展开
4个回答
展开全部
结构体指针其实是一个指针,它存储的是指向某个结构体的“地址”,所以结构体指针数组存储的其实是指向一组结构体的“地址”数组,它本身并不包含结构体的具体内容(没有被分配内存)
所以当用到他们时,要么重定向,比如:
d=&b; //让d指向b,d存储的是b的地址,这样就能通过d来调用b了
要么用malloc为他们分配内存:
d=(struct h *)malloc(sizeof(struct h));
这样d就指向系统为其分配的一块内存,其内容就是struct h中的东西
所以当用到他们时,要么重定向,比如:
d=&b; //让d指向b,d存储的是b的地址,这样就能通过d来调用b了
要么用malloc为他们分配内存:
d=(struct h *)malloc(sizeof(struct h));
这样d就指向系统为其分配的一块内存,其内容就是struct h中的东西
展开全部
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[100];
int iArray[100];
iArray就是有100个int型的变量。
nArray也是一样的有100个struct name 这种类型的变量。
指针数组也是一样的。
struct name* npArray[10];
int* ipArray[10];
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做类型名称就可以了
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[100];
int iArray[100];
iArray就是有100个int型的变量。
nArray也是一样的有100个struct name 这种类型的变量。
指针数组也是一样的。
struct name* npArray[10];
int* ipArray[10];
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做类型名称就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a 是结构体数组,a[100]等于 开辟了100个 该结构体的 空间
b 是结构体 等于开辟了一个结构体的空间
c 是指向该结构体的指针数组,开辟了三个空间,每个空间里存放一个指向该结构体的指针。
d 为指向结构体的指针。
malloc 为动态分配数组的时候用,具体用法如
int* p;
p = (int *) malloc (sizeof(int));
b 是结构体 等于开辟了一个结构体的空间
c 是指向该结构体的指针数组,开辟了三个空间,每个空间里存放一个指向该结构体的指针。
d 为指向结构体的指针。
malloc 为动态分配数组的时候用,具体用法如
int* p;
p = (int *) malloc (sizeof(int));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a是数组,a是有100个h类型元素的数组,b是h类型的元素,c是h类型的数组指针,c的每一个元素都和d的类型是一样的,例如c[0]可以指向a[0],也可以指向b,d也可以指向b或a[0].
以下几句是合法的
c[0]=&b;//c[0]指向b
d=&b;//d指向b
d=c[1];//指针c[1]赋值给d,因而d和c[1]指向的成员相同
d->level;//输出指针d指向的h类型结构体的成员level的值
malloc一般在输入不确定的时候使用,可以减小内存的使用,但分配内存是耗时间的,因而对速度要求很高时一般直接开数组.
还有什么不清楚的可以给我留言
以下几句是合法的
c[0]=&b;//c[0]指向b
d=&b;//d指向b
d=c[1];//指针c[1]赋值给d,因而d和c[1]指向的成员相同
d->level;//输出指针d指向的h类型结构体的成员level的值
malloc一般在输入不确定的时候使用,可以减小内存的使用,但分配内存是耗时间的,因而对速度要求很高时一般直接开数组.
还有什么不清楚的可以给我留言
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询