成都网站建设设计

将想法与焦点和您一起共享

c语言结构体数组指针函数 C语言函数指针数组

在C语言中,一个结构体数组,成员的指针函数。怎样对这个指针赋值?

定义一个函数:

成都创新互联公司专注于汕尾网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供汕尾营销型网站建设,汕尾网站制作、汕尾网页设计、汕尾网站官网定制、微信小程序定制开发服务,打造汕尾网络公司原创品牌,更为您提供汕尾网站排名全网营销落地服务。

void f(void *d)

{

}

{ReadData,0,0,f}。

问一个C语言的结构体的函数指针和数组之间的问题

按你原来那样写,编译之后,这样报错:

[root@localhost test]# gcc 6.c

6.c:20: error: initializer element is not constant

6.c:20: error: (near initialization for ‘KeyboardTab[0].CurrentOperate’)

6.c:21: error: initializer element is not constant

6.c:21: error: (near initialization for ‘KeyboardTab[1].CurrentOperate’)

6.c:22: error: initializer element is not constant

6.c:22: error: (near initialization for ‘KeyboardTab[2].CurrentOperate’)

6.c:23: error: initializer element is not constant

6.c:23: error: (near initialization for ‘KeyboardTab[3].CurrentOperate’)

6.c:24: error: initializer element is not constant

6.c:24: error: (near initialization for ‘KeyboardTab[4].CurrentOperate’)

把源代码修改成这样:

KeyTabStruct KeyboardTab[43] =

{

{0 ,0 ,0 ,1 ,0 ,Menu0},

{1 ,1 ,1 ,2 ,42,Menu1},

{2 ,2 ,2 ,3 ,42,Menu2},

............

{41,41,41,42,40,Menu41},

{42,42,42,0 ,0 ,Menu42}

};

其余的不变,之后编译,结果为

[root@localhost test]# gcc 6.c

6.c:20: warning: initialization from incompatible pointer type

6.c:21: warning: initialization from incompatible pointer type

6.c:22: warning: initialization from incompatible pointer type

6.c:23: warning: initialization from incompatible pointer type

6.c:24: warning: initialization from incompatible pointer type

/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../crt1.o: In function `_start':

(.text+0x18): undefined reference to `main'

collect2: ld returned 1 exit status

再加上main函数即可。

原因:指针即地址,函数指针也不例外,调用函数指针的时候,用的是函数所在的地址,“”是取地址符。

c语言如何给结构体指针赋值?

结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。

举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数

#include stdio.h

#include stdlib.h

struct student  //建立结构体,学号,姓名,3门课的分数

{

int num;

char name[10];

int score[3];

}Stu[5];          //初始化,一共5个学生的数据

void getScore(struct student * p)  //函数:向结构体读取分数,一共三门课

{

int i, j;

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

for (j = 0; j 3; j++)

scanf_s("%d", ((p+i)-score[j]));

}

void getNum(struct student * p)  //函数:向结构体读取学号

{

int i;

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

scanf_s("%d", (p + i)-num);

}

void getName(struct student * p)  //函数:向结构体读取姓名

{

int i;

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

scanf("%s", (p + i)-name);

}

int main()

{

int i, j, average[3] = { 0 };   //average数组储存每门课的平均分

getNum(Stu);            //函数调用

getName(Stu);

getScore(Stu);

for (j = 0; j 3; j++)

{

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

average[j] += Stu[i].score[j];

}

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

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name);  //依次打印学号 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j 3; j++)    //打印三门课的分数

printf(" %d", Stu[i].score[j]);

printf("\n");

}

printf("average:");

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

printf("%f ", (float)average[i]/5);   //打印三门课平均分

printf("\n");

system("pause");

return 0;

}

如:

scanf("%c%c%c",a,b,c);

输入为:

d e f

则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。

只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

C语言编程问题:结构体数组及指针

struct student *list;

int count = ReadStudentInfo("假设这是文件名", list);

这个函数是这样被调用。

里面应该这样写

int ReadStudentInfo(const char* filename, struct student** pStudents)

{

*pStudents = (struct student*)malloc(sizeof(** pStudents) * n);//假设有n个学生

}

关于C语言结构体指针做函数形参的问题

fun函数的第二个参数之所以用指针,就是为了能把函数里面对这个参数做的改动保存下来

而你如果把*s=a[p];改成s=a[p];效果相当于,改了s的值,使其不再指向参数(函数

外部变量

m)的地址,虽然*s的值是正确的,但实际m的值则没有改变,所以在外面输出的时候,结果和预期不一致了

s=a[p];这个操作本身没有问题


新闻名称:c语言结构体数组指针函数 C语言函数指针数组
文章路径:http://chengdu.cdxwcx.cn/article/dosodei.html