當前位置:首頁 » 編程語言 » c語言結構體函數指針

c語言結構體函數指針

發布時間: 2022-09-12 01:09:56

『壹』 c語言結構體內部的函數指針有什麼意義

//在結構體中包含函數指針,
//這樣,可以使用結構體,調用函數。
//這個有點像C++的面向對象的類
//十分好用。
#include"stdio.h"
structDEMO
{
intx,y;
int(*func)(int,int);//函數指針
};
intadd2(intx,inty)
{
returnx+y;
}
intmain()
{
intret=0;
structDEMOdemo;
demo.func=&add2;//結構體函數指針賦值
ret=demo.func(3,4);
printf("func(3,4)=%d ",ret);
}

『貳』 C語言中如何在結構體里寫函數,指向函數指針問題。

改動如下:
#include <stdio.h>
#include<string.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;i<3;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語言如何給結構體指針賦值

結構體數組指針作為函數參數,通過數組的首地址與偏移量對結構體數組進行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(" ");

}

printf("average:");

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

printf("%f ", (float)average[i]/5); //列印三門課平均分

printf(" ");

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語言函數指針作為結構體的問題

首先解釋一下
&st
的問題吧:&st
就是取結構體的
st
的地址傳給結構體內的函數
p

o,
根據前面
st
的定義,也就是傳給
print

power。這樣
print

power
函數就可以讀取結構體中的
i

x
值。
然後沿著各個思路,可以寫出
print

power
函數,如下:
void
print(ST
*st){
printf
("%g",
st->x);
}
void
power(ST
*st){
int
k;
double
y=1;
for
(k=0;k
i;k++)
y*=st->x;
st->x
=
y;
}
不過這里有個問題,就是你之前的
struct
中定義的函數指針是沒有參數的,但是主函數調用時是有參數的,這是矛盾的呀。要改一下:
struct
ST{
int
i;
double
x;
void
(*o)(ST*);
void
(*p)(ST*);
}
;
就沒有問題了。

『伍』 C語言:在結構體內部定義函數指針

functionpointer就是函數指針,指向一個函數,該函數的原型類似
void function(pStruct_X * p)
P.functionpointer,就等於是調用該函數了。
不過你的代碼中,沒寫初始化,到底這個函數指針是指向哪個函數。

『陸』 C語言函數怎麼傳結構體指針

#include<stdio.h>
#include<stdlib.h>

#defineLINE_MAX80

structbody{
chardata[100];//要定義成數組才可以,不然,還要去分配內存
intnum;
};

voidcreate(structbody*bd);//結構體定義後,才能使用結構體類型,所以,移動到定義之後

intmain(intargc,char*argv[]){
intchoose;
structbody*bd;
bd=(structbody*)malloc(sizeof(structbody));
while(1)
{
printf("*******************歡迎來到文章編輯系統******************** ");
printf("1.創建新文本 ");
printf("2.統計文本 ");
printf("5.退出系統 ");
printf("請選擇你需要的功能的序號:");
scanf("%d",&choose);
switch(choose)
{
case1:
printf("創建新文本 ");
create(bd);
continue;
case2:
printf("統計文本 ");
continue;
case5:
printf("謝謝您的使用! ");
break;
default:
printf("請正確輸入! ");
continue;
}
if(choose==5)
break;
}
return0;
}
voidcreate(structbody*bd)
{
printf("編輯文本,Enter鍵保存 ");
scanf("%s",bd->data);//結構體指針引用成員用->,同時,格式串應該是%s
printf("您輸入的文本是:%s ",bd->data);//同上
}

『柒』 C語言結構體的函數指針會不會亂指

指針聲明就已經確定他可以指向哪一種類型的變數了,比如整形指針……,函數指針只能指向它聲明時參數類型返回值類型相同的函數,否則會和用整型指針指向浮點型數據一樣不能通過

熱點內容
巴法雲伺服器帶寬 發布:2025-01-12 13:15:26 瀏覽:675
搭建國外伺服器需要多少錢 發布:2025-01-12 13:08:01 瀏覽:826
我的世界mod伺服器開荒 發布:2025-01-12 13:07:10 瀏覽:756
sql優化書 發布:2025-01-12 13:07:09 瀏覽:454
高校網站伺服器搭建與維護論文 發布:2025-01-12 13:06:31 瀏覽:710
sqlserver實例沒有 發布:2025-01-12 12:57:18 瀏覽:251
代碼文件伺服器地址怎麼寫 發布:2025-01-12 12:50:47 瀏覽:759
java中方法與 發布:2025-01-12 12:50:13 瀏覽:654
如何快速查找c語言編譯時的錯 發布:2025-01-12 12:49:56 瀏覽:31
看門狗上傳病毒 發布:2025-01-12 12:32:54 瀏覽:326