当前位置:首页 » 编程语言 » c语言访问结构体
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言访问结构体

发布时间: 2022-02-06 01:13:01

c语言结构体Struct怎么使用

在Turbo C中,结构也是一种数据类型, 可以使用结构变量,因此,像其它类型的变量一样,在使用结构变量时要先对其定义。

如果需要定义多个具有相同形式的结构变量时用这种方法比较方便,它先作结构说明,再用结构名来定义变量。

(1)c语言访问结构体扩展阅读

指向结构体的指针是一个一直都没有掌握好的点,希望这里能记录好一点,加强理解。
对于指针有几个好处,

第一:就像指向数组的指针比数组本身更容易操作一样,指向结构的指针通常也更容易操作;

第二:在早期的C中参数传递只能使用结构的指针;

第三:很多奇妙的数据表示都是用了包含指向其他结构的指针的结构。
和数组不同,结构的名字不是该结构的地址(即单独的结构名并不是该结构地址的同义词),必须使用 & 运算符。

参考资料c语言结构体struct相关使用说明

㈡ C语言中struct 结构体 成员的访问问题

这主要得看a是什么类型,如果a是结构体变量(比如OS_MEM_DATA
a),那么就是a.b。
如果是结构体指针变量(如OS_MEM_DATA
*a),那么就是a->b。
a->b等价于(*a).b。

㈢ C语言,结构体,访问,运算符

选择B,箭头运算符。
有几种访问结构体的方法:
访问结构成员的运算符有两种,一种是结构成员运算符“·”,也称为“圆点运算符”,另一种是结构指针运算符“->”,也称“箭头运算符”。
结构成员运算符通过结构变量名访问结构体的成员。例如:
printf("%s",student.name);
结构指针运算符由减号“-”和“>”组成(中间没有空格),它通过指向结构的指针访问结构的成员。假定声明了指向struct student的指针sPtr,并且把结构student1的地址赋给了sPtr,如下列语句通过指针sPtr打印了结构student1的成员name:
printf("%s",sPtr->name);
不要在结构指针运算符的-和>之间插入空格。
在用指针和结构成员运算符引用结构成员时一定要用圆括号(*sPtr).name,因为结构成员运算符“.”比指针复引用运算符“*”的优先级高,所以圆括号是必须的。
下面的程序演示了结构成员和结构指针运算符的用法:
#include<stdio.h>
struct student
{char *name;
char *sex;
};
main()
{
struct student student1;
struct student *sPtr;
student1.name="Tom";
student1.sex="male";
sPtr=&student1;
printf("%s%s%s\n%s%s%s\n%s%s%s\n",
student1.name,"'s sex is",student1.sex,
sPtr->name,"'s sex is",sPtr->sex,
(*sPtr).name,"'s sex is",(*sPter).sex);
return 0;
}
补充说明:圆点运算符是比较古老的写法,不能访问结构体指针变量成员,
现在都推荐使用箭头运算符,即->

㈣ c语言 结构体访问成员(·)是什么意思,理解不到。

因为结构是一个集合,由若干成员构成,访问其成员就用下面这个形式:
结构变量名.成员名
举例如下:
struct person //定义结构类型
{
int weight,height;
float salary;
}
struct person zhangsan;//定义结构变量名
以下是访问结构成员:
zhangsan.height=176;
zhangsan.salary=6588;

㈤ c语言结构体调用

#include <stdio.h>
struct person
{
char name[10];
int num;
};

void main()
{
struct person per[5];
void sort(struct person *, int );
int i;
printf("print letter:\n");
for(i=0;i<5;i++)
{
printf("name: ");
scanf("%s", &per[i].name);
printf("num: ");
scanf("%d", &per[i].num);
}
sort(per, 5);
for(i=0;i<5;i++)
printf("print: %s%d\n", per[i].name, per[i].num);
getch();
}

void sort(struct person *a, int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i].num>a[j].num)
{
t=a[i].num; /*你代码中i写成j,这是细节问题*/
a[i].num=a[j].num;
a[j].num=t;
}
}

你代码有点问题,我给你改了改。TC测试通过。
除了注视的地方,还有几点要注意:
你源代码传送的是per[0].num的地址,记:a[0],但是a[1]的地址不等于
per[1].num的地址。
指针加1的意思你没理解好。
举个列子。
int a[10];
那么*(a+1)的意思是把a地址向后移动sizeof(int)个位。
所以你那个&a[1]指向的还是结构体中的数据。(恩,这里体现了低级语言的特性。每一个内存的每一位都要考虑到。要是你写个程序:200位的浮点数加法计算机,你更能体会到什么叫做考虑到每一位内存,调试的时候要一个内存一个内存的演算。代码我的空间里有,可以自己去看)

不懂的问

㈥ c语言将文本文件读取到结构体中

呵呵,满意的话要给我追加分哦!那两个例子都是我自己给你写的。
1.
#include"stdio.h"
#include"stdlib.h"
main()
{
FILE *fp;
char s[100];
if((fp=fopen("f:\\score.txt","a"))==NULL)
{
printf("Can't open destination file!\n");
exit(0);
}
printf("Please input your name:");
gets(s);
fprintf(fp,"Name:%s\t\tScore:%d\n",s,rand()%100);
fclose(fp);
printf("Your score is saved!\n");
}

2.
#include"stdio.h"
#define N 20
struct score
{
char s[20];
int a;
}d[N];
main()
{
FILE *fp;
int i,no=0;
if((fp=fopen("f:\\score.txt","r"))==NULL)
{
printf("Can't open destination file!\n");
exit(0);
}
for(i=0;i<N&&!feof(fp);i++)
{
fscanf(fp,"Name:%s\t\tScore:%d\n",d[i].s,&d[i].a);
no++;
}
fclose(fp);
for(i=0;i<no&&d[i].s[0];i++)
printf("Name:%s\t\tScore:%d\n",d[i].s,d[i].a);
}

在文件中分隔用什么随便你,但是当你用什么分隔后,在用fscanf函数的时候也要在格式控制中加入,如我用第一个程序保存了些数据在f:\\score.txt中:
Name:ytyh Score:1
Name:tytuy Score:41
Name:hjhj Score:41
由于我在第一个程序中用的是fprintf(fp,"Name:%s\t\tScore:%d\n",s,rand()%100);故在第二个程序中就心须用fscanf(fp,"Name:%s\t\tScore:%d\n",d[i].s,&d[i].a);
在ASCII文件中我只知道这样,但在二进制文件中就没有这么麻烦,直接用fread就行。

㈦ 如何在c语言中的结构体如何调用

结构体定义好后就把他当成数据类型来用,你贴出具体的代码吧,这样能说清楚点

㈧ C语言关于指针访问结构体数据的使用

呵呵,很简单,你只要把x堪称一块内存就可以了。

x相当于:

+---------------------------+

|1|2|3|4|1|2|3|4|5|6|7|8|9|a|

+---------------------------+

|---n---|---------str-------|

我们从图中可以看到n其实占了四个字节的内存,而str占了10个字节。

那么str[5]相当于从头开始算跳过了九个字节,那么p[9]就是正好是str[5]的地方,也可以*(p+9)形象的说明了跳过了9个字节。

㈨ C语言中struct 结构体 成员的访问问题

这主要得看a是什么类型,如果a是结构体变量(比如OS_MEM_DATA a),那么就是a.b。
如果是结构体指针变量(如OS_MEM_DATA *a),那么就是a->b。
a->b等价于(*a).b。

㈩ C语言问题:结构体里面的成员,如果想按位访问。。。

不同的编译器对位字段有不同的类型范围,GCC以及VC++就不允许数组位字段,而BCB则允许