c语言结构体函数指针怎么赋值

Python05

c语言结构体函数指针怎么赋值,第1张

指针就是指向内存的某个地址的一个变量。

结构指针就是这个指针变量的值必须指向存放该结构体的内存位置。

当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。

struct student{

int id

int score

} aaa

struct student *p = null//结构体指针p初始化赋值为null

struct student *p2=&aaa//p2指向aaa

struct student *p3=(struct student *)malloc(sizeof(struct student))//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3

//在结构体中包含函数指针,

//这样,可以使用结构体,调用函数。

//这个有点像C++的面向对象的类 

//十分好用。 

#include "stdio.h"  

struct DEMO  

{  

    int x,y  

    int (*func)(int,int) //函数指针  

}  

int add2(int x,int y)  

{  

    return x+y  

}  

int main()  

{

int ret=0

    struct DEMO demo  

    demo.func=&add2 //结构体函数指针赋值  

    ret=demo.func(3,4)

    printf("func(3,4)=%d\n",ret)  

}

有多处错误,主程序中只有一处,但调用函数错得挺多的,最主要的是对结构指针的运用,

stu *p 下,引用其数组不能用(*p)[xx],因为p本身就是结构数组的首址,所以直接用p[xx]即可访问定义的所有单元。

以下将你的程序依原风格进行修改,主程序中将修改前的错误代码罗列于右,而order函数因为修改的地方多所以不再提示修改处:

#include<stdio.h>

typedef struct student

{

int num

char name[20]

int a,b,c

double ave

}stu

stu order(stu *p,int n)

int main()

{

stu s[6] /*改为s[5]*/

int i

for(i=0i<5i++)

{

printf("input num:")

scanf("%d",&s[i].num)

getchar()

printf("name:")

scanf("%s",s[i].name) /*原为scanf("%s",&s[i].name)*/

printf("a\tb\tc\n")

scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c) s[i].ave=(s[i].a+s[i].b+s[i].c)*1.0/3

}

order(s,5)

printf("num\tname\ta\tb\tc\n")

for(i=0i<5i++)

{

printf("%d\t%s\t%d\t%d\t%d\t%lf\n",s[i].num,s[i].name,s[i].a,s[i].b,s[i].c,s[i].ave)

}

return 0

}

stu order(stu *p,int n)

{

int j,k

stu index

for(j=0j<n-1j++)

for(k=j+1k<nk++)

if(p[j].ave>p[k].ave)

{

index=p[j]

p[j]=p[k]

p[k]=index

}

}