c語言指向結構體的指針
A. c語言中指向結構體變數的指針,這樣寫對嗎
pT_t
確實是指向
結構體
變數的指針,但其實它是一個類型,就跟
int,int*這些類似
pT_t
ptest
=
NULL;
的效果,其實等同於
T_t
*ptest
=
NULL;
B. C語言編程指向結構體數組的指針
下面的程序是我以前寫的,你稍微改改就能符合你的要求了
#include<stdio.h>
#include<malloc.h>
typedefstructst
{
charname[20];
intchinese;
intmath;
intenglish;
floataverage;
}student;
voidswap(student*a,student*b)
{
studenttemp=*a;
*a=*b;
*b=temp;
}
voidsort(student*array,intn)
{
inti,j,flag;
for(i=0;i<n-1;i++)
{
flag=1;
for(j=0;j<n-i-1;j++)
{
if(array[j].average>array[j+1].average)
{
swap(array+j,array+j+1);
flag=0;
}
}
if(flag)
break;
}
}
voidprint(student*array,intn)
{
inti;
printf("姓名 語文 數學 英語 平均成績 ");
for(i=0;i<n;i++)
{
printf("%s %d %d %d %f ",array[i].name,array[i].chinese,
array[i].math,array[i].english,array[i].average);
}
}
intmain()
{
intnumber=9;
inti;
student*stu=(student*)malloc(sizeof(student)*9);
for(i=0;i<number;i++)
{
printf("請輸入第%d個學生的姓名及成績(姓名語文數學英語成績以空格隔開): ",i+1);
scanf("%s%d%d%d",(*(stu+i)).name,&(*(stu+i)).chinese,
&(*(stu+i)).math,&(*(stu+i)).english);
(*(stu+i)).average=((*(stu+i)).chinese+
(*(stu+i)).math+(*(stu+i)).english)/(float)3.0;
}
print(stu,number);
sort(stu,number);
print(stu,number);
free(stu);
return0;
}
C. c語言結構體指針
既然已經聲明了結構體指針,那麼編譯器就會認為這個指針指向的對象符合你所給出的結構體的構成,因此順著地址摸過去再按照結構體解析。
比方說,給你個203房間的鑰匙,雖然你並不清楚203房間具體的位置,但是你也會知道房間里至少有床可供休息、有廁所可供便溺,當你恰好有便意的時候就會找到203房間去上廁所……
D. 急求急急急C語言結構體的結構指針!
簡單講兩個概念:
1、數組名表示數組首地址。
2、運算符->優先順序高於*。
所以*pt->y就相當於*(pt->y)。
由於pt==c==&c[0];
所以pt->y就是結構體變數{10,a}->y就是a。
a也是數組名,所以就是&a[0];
所以*pt->y就是*(&a[0])就是a[0]就是1。
另外補充,你結構數組初始化這樣寫不太標准,建議把數組元素也用大括弧括起來,像這樣struct st c[2]={{10,a},{20,b}};
E. C語言,利用指向結構體的指針編程
#include<stdio.h>
#include<stdlib.h>
#include<string>
#defineSTUDENT_NUM3//需要輸入的學生總數
typedefstruct
{
intnNumber;//學號
charchName[32];//姓名
floatMidScore;//期中成績
floatEndScore;//期末成績
floatAverScore;//平均成績
}STUDENT_UNIT;
/*
brief:成績排序
para:pStudent指向結構體的指針
nNum: 需要排序的個數
return:無
*/
voidSortByScore(STUDENT_UNIT*pStudent,intnNum);
intmain()
{
STUDENT_UNITStudent[STUDENT_NUM]={0,0,0};
intnSort[STUDENT_NUM]={0};
for(inti=0;i<STUDENT_NUM;i++)
{
printf("請輸入學號:");
scanf("%d",&Student[i].nNumber);
//printf(" ");
printf("請輸入姓名:");
scanf("%s",&Student[i].chName);
//printf(" ");
printf("請輸入期中成績:");
scanf("%f",&Student[i].MidScore);
//printf(" ");
printf("請輸入期末成績:");
scanf("%f",&Student[i].EndScore);
printf(" ");
Student[i].AverScore=(Student[i].MidScore+Student[i].EndScore)/2.0;
}
SortByScore(&Student[0],STUDENT_NUM);//排序
//輸出
for(inti=0;i<STUDENT_NUM;i++)
{
printf("學號%d 姓名%s 期中成績%.1f期末成績%.1f 平均成績%.1f ",
Student[i].nNumber,Student[i].chName,Student[i].MidScore,Student[i].EndScore,Student[i].AverScore);
}
return0;
}
voidSortByScore(STUDENT_UNIT*pStudent,intnNum)
{
STUDENT_UNITTempStudent={0};
for(inti=0;i<nNum-1;i++)
{
for(intj=i+1;j<nNum;j++)
{
if((pStudent+i)->AverScore<(pStudent+j)->AverScore)
{
memset((char*)&TempStudent,0,sizeof(STUDENT_UNIT));
memcpy((char*)&TempStudent,(char*)(pStudent+i),sizeof(STUDENT_UNIT));
memset((char*)(pStudent+i),0,sizeof(STUDENT_UNIT));
memcpy((char*)(pStudent+i),(char*)(pStudent+j),sizeof(STUDENT_UNIT));
memset((char*)(pStudent+j),0,sizeof(STUDENT_UNIT));
memcpy((char*)(pStudent+j),(char*)&TempStudent,sizeof(STUDENT_UNIT));
}
}
}
}
F. 在C語言中關於指向結構體指針的問題
第一句只是得到了一個指針 沒做任何操作
第二句是把P1這個指針指向後一個節點,是對P1賦了新值
G. C語言指向結構體的指針
C語言中的結構體
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。定義與聲明
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。結構體成員的引用
有兩種方式,英文的句點 . ,一個減號加一個大於號 ->。
當結構體是一個指針時要引用結構體的成員就用-> 而如果不是指針就用.。
如:
struct msg_st {
int a;
};
struct msg_st msg;
struct msg_st *ms;
msg.a = 10;
ms->a = 20;
H. C語言結構體指針
->的優先順序高於++,
所以++pt–>x,是把x的值加1
I. 文件指針 跟 指向結構體的指針 有什麼區別(C語言)
文件指針是指向struct
FILE的指針(類型為struct
FILE*),是指向結構體的指針的其中一種。
FILE是C語言中默認用來表示文件信息的結構體,在stdio.h中有定義,具體內容和運行環境(平台)相關。當打開一個文件時,文件內容由庫函數記錄到一個FILE結構體中,而用戶可以通過庫函數返回的struct
FILE*類型的指針對文件進行間接操作。
此外FILE結構體中含有文件的讀寫指針(LS誤把這個當作文件指針了),用於指示文件的讀寫位置,一般是不直接訪問的(通過fseek、ftell、rewind等讀取或寫入)。
J. c語言指向結構體的指針
首先你的linkman是struct person的數組
linkman本身就是個地址
可以直接傳遞到函數里的
如果你要用指針的話,就需要一個struct的二維指針,或者指針數組,如struct person **p;或者struct person (*p)[200];
還是建議你直接使用linkman傳遞地址。
另外,你要用linkman裡面的name的話,如果是當字元串來使用的話,直接linkman[1]->name就可以了