c语言结构体成员指向函数 c语言结构体成员运算符

C语言中如何在结构体里写函数,指向函数指针问题。

改动如下:

站在用户的角度思考问题,与客户深入沟通,找到门源网站设计与门源网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名注册雅安服务器托管、企业邮箱。业务覆盖门源地区。

#include stdio.h

#includestring.h

enum gender

{

male,famale

};

typedef struct course

{

char coursename[10];

int coursescore;

}STC;

typedef struct student

{

long studentnumber;

char name[20];

int age;

enum gender sex;

STC coursescore[3];

struct student *next;

void (*ptooutput)(struct student*); // 改动1:改成指针,与output函数匹配

}STD;

void output(struct student *p)

{

int i;

printf("学生%s:\n",p-name);

printf("他的学号是%ld\n",p-studentnumber); // 改动2:学号

printf("他的年龄是%d\n",p-age); // 改动3:年龄

if(p-sex==0)

{printf("他的性别是男\n");}

else

{printf("他的性别是女\n");}

for(i=0;i3;i++)

{

printf("他的%s",p-coursescore[i].coursename);

printf("成绩是%d\n",p-coursescore[i].coursescore);

}

}

main()

{

STD a;

a.studentnumber=1011110201;

strcpy(a.name,"叶超");

a.age=19;

a.sex=male;

strcpy(a.coursescore[0].coursename,"数学");

a.coursescore[0].coursescore=87;

strcpy(a.coursescore[1].coursename,"英语");

a.coursescore[1].coursescore=72;

strcpy(a.coursescore[2].coursename,"C语言");

a.coursescore[2].coursescore=66;

a.ptooutput = output; // 改动4:设置打印函数指针

a.ptooutput(a); // 改动5:输入参数为指针

}

C语言结构体指针成员所指向的变量如何访问?

结构体指针成员所指向变量,这个说法理解起来有点困难。

从字面意思上看断句,有如下几种可能:

首先定义一个包含所有可能情况的结构体:

struct test

{

int a;

int *p;

};

struct test t1, *t2;1

结构体/指针成员/所指向的变量。

结构体中有指针成员,然后要访问这个结构体成员指向的变量值。

那么可以*(t1.p)这种方式对p取值。

2

结构体指针/成员/所指向变量。

这种情况有两种方法可以访问:

*(t2-p)

或者

*(*(t2).p)

效果是一样的。

3

描述有误,实际为:

结构体指针所指向/成员变量。

同样有两种方法可以使用:

t2-p

或者

(*t2).p

C语言 指向结构体成员运算符

指向结构体成员运算符 : (-) 从外部看是包含了一个解指针(*)所以要对指针进行操作

例如:

typedef struct

{

int data[20];

int length;

}Sqlist;

Sqlist

*L;

L-lenth;

//同样是得到L中length的值

结构体成员运算符 : ( . )直接调用结构体中的某个成员

例如:

typedef struct

{

int data[20];

int length;

}Sqlist;

Sqlist L;

L.length; //直接调用L中length的值

L.data[3];

扩展资料:

结构体成员的点运算符(.)和箭头运算符(-)的区别:

相同点:两个都是二元操作符,其右操作符是成员的名称。

不同点:点操作符左边的操作数是一个“结果为结构”的表达式;箭头操作符左边的操作数是一个指向结构的指针。

如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符。

参考资料:

百度百科--

菜鸟教程-C++ 运算符

C语言问题:指向函数(B)的指针做结构体(A)的成员,而这个函数(B)的形参中有这个结构体(A)类型的.这个该怎...

c的结构体与c++的结构体的区别

答:标准C中定义,C语言中的结构体内是不能声明函数的

C++结构体中可以有函数的声明,不过他们都是历史遗留下来的产物

现在,应该避免使用结构体,因为结构体都可以由类来代替

你应该问类与结构的区别,类中如果不声明成员的访问控制属性,那么该成员默认是私有成员的,但是在结构题中,如果不进行显示说明,则默认访问属性是公有的

1:语言的内存分配有哪几种.?

答:不太明白你要问什么,不过访问内存是有两种方式,一种是直接通过变量名来访问,一种是间接访问,通过指针来访问,至于你说的内存分配的方式,有静态分配内存,当然也有动态内存分配,这个应该是你问的把

2:指针函数 与 函数指针的 区别.?

答:看名字你也应该有一定的理解了把

对于指针函数,踏的重心在函数,指针是修饰函数的,可以这么理解,那么它的重心既然是函数,则表示是定义了一个函数,至于是什么样的函数呢,由于是由指针修饰的,你就可以联想到,这个函数的返回类型是指针类型的

至于函数指针,他的重心是指针,函数是修饰指针的,则表示他是定义一个指针,但怎么理解呢,这是个什么样的指针呢,与我们平常所定义的指针不同,我们平常所定义的指针,是指向一个变量的,但是他与众不同的是,他不是指向一个变量,他是指向一个函数,直接使用指针名即可使用这个函数

3:冒泡排序的缺点是什么.?

答:冒泡排序的缺点是,每次排序只能冒出一个,要么是最大的要么是最小的元素,也就是说,你的循环做一趟,你才找出来一个元素,对于有n个元素,进行排序,则要循环n-1趟,才可以排好序.他的算法时间复杂度是n-1

你可以对比一些快序的排序算法,就知道了他的缺点了,他的效率不太高,你可以写两个以不同的算法实现的一个排序程序,比较下两个程序的优劣就知道了

上面已尽自己的最口语话的描述了,楼主应该可以看的明白把


当前标题:c语言结构体成员指向函数 c语言结构体成员运算符
本文网址:http://scyanting.com/article/doopcoe.html