结构体指针c语言
❶ c语言结构体指针如何定义和使用
struct stu
{
char name[20];
long number;
float score[4];
} ;
再定义指向结构体类型变量的指针变量:
struct stu *p1, *p2 ;
定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员;
❷ C语言指向结构体的指针
C语言中的结构体
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。定义与声明
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。结构体成员的引用
有两种方式,英文的句点 . ,一个减号加一个大于号 ->。
当结构体是一个指针时要引用结构体的成员就用-> 而如果不是指针就用.。
如:
struct msg_st {
int a;
};
struct msg_st msg;
struct msg_st *ms;
msg.a = 10;
ms->a = 20;
❸ c语言 结构体指针
struct node next;只有一个实体next,虽然写在循环里,但编译时就提前到前面合适的地方去了,所以循环只操作了一个next!
❹ C语言 结构体指针
孩子,你这个代码很多错误。
1 编译错误:result=(studentarr+6);地址赋值给结构体对象?
2 scanf("%s,%s,%s,%s,%c,%d",STU[i].name,STU[i].surname,STU[i].UUN,STU[i].department,&STU[i],每个变量前都要加&
3 printf("%s %s %s %s %c %d",findOldest.name,findOldest.surname,findOldest.UUN,findOldest.department,findOldest.gender,findOldest.age);函数名称的变量?错了吧?
4 严重错误:结构体中如:name这种char*根本存不下scanf输入的字符串的,需要把所有char*改成char数组
5 for(i=3;i<6;i++){ scanf ...}这种貌似可能搞不定的,没法多次循环输入多次,这点哥也不确定。
最后附上简单修改的代码,我没时间,没帮你改涉及scanf的部分。
#include <stdlib.h>
#include <stdio.h>
typedef struct{
char* name;
char* surname;
char* UUN;
char* department;
char gender;
int age;
}student_t;
student_t* findOldest(student_t *studentarr){
//student_t temp;
int olderAge;
int sequence;
//student_t result;
int i;
sequence = 0;
olderAge = studentarr->age;
for(i=1;i<3;i++)
{
//if(studentarr->age > (studentarr+1)->age){
// temp=*(studentarr+i);
// *(studentarr+i)=*(studentarr+1+i);
// *(studentarr+i+1)=temp;
//}
printf("age[%d]\n", studentarr[i].age);
if(olderAge < studentarr[i].age)
{
olderAge = studentarr[i].age;
sequence = i;
printf("sequence[%d]\n", sequence);
}
}
//result = *(studentarr+6);
//return result;
return (studentarr+sequence);
}
int main() {
/* BEGIN ANSWER */
student_t STU[3]={
{"John","Bidhop","d1234","Inf",'m',20},
{"Lady","Cook","s2345","Eng",'f',17},
{"James","Jackson","s3456","Eng",'m',19}
};
int i;
//for(i=3;i<6;i++){
//printf("please type the data of students\n");
// printf("name,surname,UUN,department,gender,age\n");
// scanf("%s,%s,%s,%s,%c,%d",STU[i].name,STU[i].surname,STU[i].UUN,STU[i].department,&STU[i].gender,&STU[i].age);
//}
student_t *stu=STU;
student_t* oldest = findOldest(stu);
printf("%s %s %s %s %c %d\n",oldest->name,oldest->surname,oldest->UUN,oldest->department,oldest->gender,oldest->age);
/* END ANSWER */
return EXIT_SUCCESS;
}
❺ C语言结构体指针
->的优先级高于++,
所以++pt–>x,是把x的值加1
❻ C语言的结构体及指针
结构体就像数组一样,其中的数据是有互相联系的,有些情况下定义一些简单的变量是不能反映出数据之间的内在联系,所以我们就把这些数据组合成一个项,而这个项中包含着很多不同的数据项,这就是结构体。
简单理解下,就是说把一些有内在联系的不同变量放在一起封装成一个整体,这就是结构体。
指针,其实就是一个存放地址的变量,指针可以指向变量,数组,结构体等数据所在的内存单元。
指针就是用来通过地址去找数据的,只要你把该数据的地址给指针,那么当你用到指向这个数据的指针时就等于在使用该数据。
❼ c语言结构体指针
既然已经声明了结构体指针,那么编译器就会认为这个指针指向的对象符合你所给出的结构体的构成,因此顺着地址摸过去再按照结构体解析。
比方说,给你个203房间的钥匙,虽然你并不清楚203房间具体的位置,但是你也会知道房间里至少有床可供休息、有厕所可供便溺,当你恰好有便意的时候就会找到203房间去上厕所……
❽ c语言指针和结构体
楼主你好:
for(i=cnt;i>0;i--)
{/*P为临时结构体指针*/
p=(struct linklist *)malloc(sizeof(linklist));
scanf("%s%s%d",p->sno,p->sname,&p->sgrade);
p->next=ps->next;
ps->next=p;
}
你仔细看一下你的这段代码。
第一次循环的时候,p指向ps指向的地址,然后ps指向p,这样的结果是:ps--->p---->p->next
然后下一次循环,ps->next现在是p,你执行了“p->next=ps->next”那么p指向了p自己。。。而ps指向了p。在以后的循环中无法改变这一现象,从而造成了死循环,不知道你是不是能够明白,推荐你画一下图,画画就明白了。
还有最后的那个for循环,终止条件改为p=p->next,这个应该是粗心了吧?
看起来你是初学c,c中联表示比较难以理解的一部分,祝你好运,学业有成。
❾ C语言结构体指针的问题
语法规则允许这两种等价的写法,不过第一种是不是更美观一些?