指針就是指向內(nèi)存的某個(gè)地址的一個(gè)變量。
成都創(chuàng)新互聯(lián)公司專注于朔州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供朔州營(yíng)銷型網(wǎng)站建設(shè),朔州網(wǎng)站制作、朔州網(wǎng)頁(yè)設(shè)計(jì)、朔州網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造朔州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供朔州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
結(jié)構(gòu)體指針就是這個(gè)指針變量的值必須指向存放該結(jié)構(gòu)體的內(nèi)存位置。
當(dāng)這個(gè)指針沒(méi)有任何指向時(shí),可以賦值為null值,但是改指針不可使用,程序中應(yīng)該做判斷。下面是一些賦值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//結(jié)構(gòu)體指針p初始化賦值為null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//內(nèi)存中申請(qǐng)一個(gè)結(jié)構(gòu)體空間,并將地址強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體指針變量賦值給p3
首先解釋一下
st
的問(wèn)題吧:st
就是取結(jié)構(gòu)體的
st
的地址傳給結(jié)構(gòu)體內(nèi)的函數(shù)
p
和
o,
根據(jù)前面
st
的定義,也就是傳給
和
power。這樣
和
power
函數(shù)就可以讀取結(jié)構(gòu)體中的
i
和
x
值。
然后沿著各個(gè)思路,可以寫出
和
power
函數(shù),如下:
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;
}
不過(guò)這里有個(gè)問(wèn)題,就是你之前的
struct
中定義的函數(shù)指針是沒(méi)有參數(shù)的,但是主函數(shù)調(diào)用時(shí)是有參數(shù)的,這是矛盾的呀。要改一下:
struct
ST{
int
i;
double
x;
void
(*o)(ST*);
void
(*p)(ST*);
}
;
就沒(méi)有問(wèn)題了。
#include?stdio.h
#include?stdlib.h
#define?LINE_MAX?80
struct?body{
char?data[100];?//要定義成數(shù)組才可以,不然,還要去分配內(nèi)存
int?num;
};
void?create(struct?body?*bd);?//結(jié)構(gòu)體定義后,才能使用結(jié)構(gòu)體類型,所以,移動(dòng)到定義之后
int?main(int?argc,?char?*argv[])?{
int?choose;
struct?body?*bd;
bd?=?(struct?body*)malloc(sizeof(struct?body));
while(1)
{
printf("????????*******************歡迎來(lái)到文章編輯系統(tǒng)********************\n");
printf("1.???創(chuàng)建新文本\n");
printf("2.???統(tǒng)計(jì)文本\n");
printf("5.???退出系統(tǒng)\n");
printf("請(qǐng)選擇你需要的功能的序號(hào):");
scanf("%d",choose);
switch(choose)
{
case?1:
printf("創(chuàng)建新文本\n");
create(bd);
continue;
case?2:
printf("統(tǒng)計(jì)文本\n");
continue;
case?5:
printf("謝謝您的使用!\n");
break;
default:
printf("請(qǐng)正確輸入!\n");
continue;
}
if(choose?==?5)
break;
}
return?0;
}
void?create(struct?body?*bd)
{
printf("編輯文本,Enter鍵保存\n");
scanf("%s",bd-data);//結(jié)構(gòu)體指針引用成員用-,??同時(shí),格式串應(yīng)該是%s
printf("您輸入的文本是:%s\n",bd-data);?//同上
}
//在結(jié)構(gòu)體中包含函數(shù)指針,
//這樣,可以使用結(jié)構(gòu)體,調(diào)用函數(shù)。
//這個(gè)有點(diǎn)像C++的面向?qū)ο蟮念?
//十分好用。?
#include?"stdio.h"??
struct?DEMO??
{??
int?x,y;??
int?(*func)(int,int);?//函數(shù)指針??
};??
int?add2(int?x,int?y)??
{??
return?x+y;??
}??
int?main()??
{
int?ret=0;
struct?DEMO?demo;??
demo.func=add2;?//結(jié)構(gòu)體函數(shù)指針賦值??
ret=demo.func(3,4);
printf("func(3,4)=%d\n",ret);??
}