怎么样才能用循环的方法来访问C语言结构体中所有的成员,

来源:百度知道 编辑:UC知道 时间:2024/06/29 02:05:42
例如
struct hhh
{
char *a;
char *b;
char *c;
.
.
.

}我想用循环的方法来访问所有的成员.有没有知道该怎么解决的
谢谢
指针的偏移量该怎么定义
我用malloc()给结构体分配空间,如果用指针那么指,显示的是结构体中每个成员里面的值.例如a="123",b="456" p=hh->a;
p++; printf("%s\n",p);这样显示的是 123 23 3 456 56 6 这样的,所以怎么样控制指针偏移量是关键,还有C语言 C++我都会,只要告诉我核心算法就好了.基础的不用解释,我能看懂

首先要说明的是结构体是一种自定义的数据类型,结构体中的各成员在内存中的存放方式是连续的,注意是连续的(就像数组的存放一样),这样,你的问题就迎刃而解了:
第一步:假设你已经让一个指针p指向了该结构体,事实上该指针所存放的地址就是那个结构体中的所有成员中的第一个元素的地址(对于你的这个问题,p存放了字符指针变量a的地址),
第二步:因为要用循环,我要知道你那元素中到底有多少个元素,假设有n个元素吧,那么:n=sizeof(struct hhh )/sizeof(char) (不知道你知道吗?sizeof()是计算变量的大小的,是系统的,直接用就行)
第三步:指针偏移,已经说了,结构体中的各成员在内存中的存放方式是连续的,
那么这样做就可以了: p++ ,这p第加1,p就指向了结体中的下一个元素.
第三步:写程序

for(int i=0;i<n;i++){
cout<<*p<<endl;
p++
}
这样就可以了.
如果你没有学过C++的话,那么我在这里说明一下,cout<<类似C中的printf()
endl是换行,有些类似\n
说了这么多,不知道你懂了没有啊,慢慢看哟

定义一个指针变量,并让它指向结构体的第一个成员,再用循环来偏移指针就可以了