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