当前位置:首页 » 编程语言 » c语言结构体指针数组

c语言结构体指针数组

发布时间: 2023-01-06 11:09:49

‘壹’ c语言的指针结构体数组问题

#include<stdio.h>
#include<string.h>

structstu{

intnum;
charname[20];
charsex;
floatscore;
}boy[5]={{101,"liping",'m',45},
{102,"zhangping",'m',62.5},
{103,"hefang",'m',92.5},
{104,"chengling",'f',87},
{106,"wangming",'m',58}};
structnode
{
structstunum;
structnode*next;
};

main()
{
inti=0,bjg=0;
structnodes[5]={0};
for(i=0;i<5;i++)
{
s[i].num.num=boy[i].num;
strcpy(s[i].num.name,boy[i].name);
s[i].num.sex=boy[i].sex;
s[i].num.score=boy[i].score;
s[i].next=&s[i+1];
}
s[4].next=NULL;
printf("不及格: ");
for(i=0;i<5;i++)
{
if(s[i].num.score<60)
{
bjg++;
printf("[%d][%s][%c][%.2f] ",s[i].num.num,s[i].num.name,s[i].num.sex,s[i].num.score);
}
}
printf("不及格人数【%d】 ",bjg);
}
不及格:
[101][liping][m][45.00]
[106][wangming][m][58.00]
不及格人数【2】
Pressanykeytocontinue

不贴代码我就不调了自己写了个

不说别的光是malloc也不对啊你不mallocstructnode吗?
不mallocstructnode你的next指针存哪里?
至于链表赋值我就不看了

‘贰’ c语言中数组指针和结构体指针问题

楼上都说的很不错。针对补充,我说两句
结构体名字不是指针,结构体数组的名字才是指针
就好像int x;.....x不是指针,int x[2].....x是常量指针
同样 struct aa{};...aa x;...x不是指针,aa x[3]....x是常量指针
------------------------------------------------------
对于数组int a[2]={25,32},我们通常把a看成是指针
但实际上,这个指针并不存在的,a代表这个数组的首地址,只有才参与表达式运算时,才暂时转化为常量指针(不可更改)
所以
&a,取出的这个实际不存在的指针的地址,同数组第一个元素的地址是一样的
---------------------------------------------------
换个例子,如果你这么定义
int a[3],*p=a;
printf("%d",&p);........就是p的自身地址,类似你上面的xxxx
printf("%d",p);..........就是数组a的首地址,类似你上面的yyyy
---------------------------------------------------
总结
你定义一个普通指针p的话,p和&p是不同的
你定义一个数组a的话,a和&a是相同的,因为C中只是把a看做常量指针,而不是实际存在的

‘叁’ C语言编程指向结构体数组的指针

下面的程序是我以前写的,你稍微改改就能符合你的要求了

#include<stdio.h>
#include<malloc.h>
typedefstructst
{
charname[20];
intchinese;
intmath;
intenglish;
floataverage;
}student;
voidswap(student*a,student*b)
{
studenttemp=*a;
*a=*b;
*b=temp;
}
voidsort(student*array,intn)
{
inti,j,flag;
for(i=0;i<n-1;i++)
{
flag=1;
for(j=0;j<n-i-1;j++)
{
if(array[j].average>array[j+1].average)
{
swap(array+j,array+j+1);
flag=0;
}
}
if(flag)
break;
}
}
voidprint(student*array,intn)
{
inti;
printf("姓名 语文 数学 英语 平均成绩 ");
for(i=0;i<n;i++)
{
printf("%s %d %d %d %f ",array[i].name,array[i].chinese,
array[i].math,array[i].english,array[i].average);
}
}
intmain()
{
intnumber=9;
inti;
student*stu=(student*)malloc(sizeof(student)*9);
for(i=0;i<number;i++)
{
printf("请输入第%d个学生的姓名及成绩(姓名语文数学英语成绩以空格隔开): ",i+1);
scanf("%s%d%d%d",(*(stu+i)).name,&(*(stu+i)).chinese,
&(*(stu+i)).math,&(*(stu+i)).english);
(*(stu+i)).average=((*(stu+i)).chinese+
(*(stu+i)).math+(*(stu+i)).english)/(float)3.0;
}
print(stu,number);
sort(stu,number);
print(stu,number);
free(stu);
return0;
}

‘肆’ C语言结构体指针数组怎么声明

我说明写在案例的备注里,你参考吧。

#include<stdio.h>
typedefstructst
{
intid;
}ST,*STP;//先定义类型ST是结构类型STP是结构指针类型
intmain()
{
STPst[2];//这里st就是你要的结构指针数组
STst1,st2;//这里我定义了2个结构变量,并赋值,让指针数组的元素分别指向这两个变量地址
st1.id=1;st2.id=2;
st[0]=&st1;
st[1]=&st2;
printf("%d,%d ",st[0]->id,st[1]->id);//打印指针数组指向地址内容
return0;
}

‘伍’ C语言编程问题:结构体数组及指针

struct student *list;
int count = ReadStudentInfo("假设这是文件名", &list);
这个函数是这样被调用。
里面应该这样写
int ReadStudentInfo(const char* filename, struct student** pStudents)
{
*pStudents = (struct student*)malloc(sizeof(** pStudents) * n);//假设有n个学生
}

‘陆’ C语言结构体数组的定义

所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。

结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。

struct 结构体类型名{类型名 成员名;类型名 成员名;……},先声明结构体类型,再定义结构体变量名。声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。

(6)c语言结构体指针数组扩展阅读:

结构体数组指针类型:

一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址,指针变量也可以用来指向结构体数组中的元素。

1、类型一:

指向结构体变量的指针引用结构体变量中的成员。

2、类型二:

用结构体变量和指向结构体变量的指针构成链表,链表是一种常见的重要的数据结构。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。

链表中的每一个元素称为“结点”,每个结点都应包括两个部分:

一是用户需要用的实际数据,

二是下一个结点的地址。

链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。这种链表的数据结构,必须利用结构体变量和指针才能实现。

可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。

参考资料来源:网络—结构体类型—数组

‘柒’ c语言结构体中指针数组怎样赋值

看Unix/Linux上的man:
Standard
C
Library
Functions
gets(3C)
NAME
gets,
fgets
-
get
a
string
from
a
stream
SYNOPSIS
#include
char
*gets(char
*s);
char
*fgets(char
*s,
int
n,
FILE
*stream);
DESCRIPTION
The
gets()
function
reads
bytes
from
the
standard
input
stream
(see
intro(3)),
stdin,
into
the
array
pointed
to
by
s,
until
a
newline
character
is
read
or
an
end-of-file
con-
dition
is
encountered.
The
newline
character
is
discarded
and
the
string
is
terminated
with
a
null
byte.
....
gets是标准库函数,要求传入的是一个数组的地址。其实是要求caller应当分配空间给他。你的结构体中指针数组指向了已经分配好的内存吗?如果没有就别想了。想用就自己先给他空间

‘捌’ c语言如何用指针指向结构体数组

#include<stdio.h>

int main()

{ struct st

{ int id;

char name[20];

}*p,stu[10];

int i;

for(p=stu; p<stu+3; p++)

scanf("%d%s",&p->id,p->name);

for(p=stu; p<stu+3; p++)

printf("%d %s ",p->id,p->name);

return 0;

}

‘玖’ C语言结构体指针,结构体数组 之间的赋值问题。

没有问题呀 这是我的测试代码
#include<stdio.h>
#include<string.h>
typedef struct ST_Jpeg_Data
{
char Buff[4];
char index;
long songIndex;
long checkIndex;

}t_t;
int main()
{
t_t a[10]={0};
t_t* t=NULL;
t=a;
strcpy(t->Buff,"ab");
t->index='b';
t->songIndex=1;
t->checkIndex=2;
t++;
strcpy(t->Buff,"cd");
t->index='d';
t->songIndex=3;
t->checkIndex=4;
printf("%s\t%c\n",a[0].Buff,a[0].index);
printf("%s\t%c\n",a[1].Buff,a[1].index);
return 0;
}

‘拾’ c语言怎么让一个数组指向一个结构体指针

指向结构体指针的只能是另一个指针.
数组除非是指针数组.否则是无法做到的.
可以反过来,结构体指针指向数组.做一个强制转换即可.
比如
struct A * p =(struct A*)a;
其中a是数组名.

热点内容
随机启动脚本 发布:2025-07-05 16:10:30 浏览:535
微博数据库设计 发布:2025-07-05 15:30:55 浏览:30
linux485 发布:2025-07-05 14:38:28 浏览:310
php用的软件 发布:2025-07-05 14:06:22 浏览:760
没有权限访问计算机 发布:2025-07-05 13:29:11 浏览:436
javaweb开发教程视频教程 发布:2025-07-05 13:24:41 浏览:722
康师傅控流脚本破解 发布:2025-07-05 13:17:27 浏览:246
java的开发流程 发布:2025-07-05 12:45:11 浏览:696
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:288
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:837