久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1153|回復: 3
收起左側

關于C語言結構體用法的疑惑

[復制鏈接]
ID:997026 發表于 2022-5-12 14:42 | 顯示全部樓層 |閱讀模式
關于結構體用法的幾點疑問,請教大家:

比如定義如下結構體,結構體成員都是指針類型:

unsigned int     date_temp0=0;
unsigned int     day_temp0=0;
unsigned char  year_temp0=0;

unsigned int     date_temp1=0;
unsigned int     day_temp1=0;
unsigned char   year_temp1=0; //全局變量



typedef struct  abc{

unsigned int*     dates;
unsigned int*     days;
unsigned char*   years;

} timeset;



//定義一個結構體數組并初始化
//這里有個疑問,我把上述全局變量作為結構體數組的成員,這樣可以嗎?我試著編譯之后,編譯器并沒有報錯。
timeset   time[2] ={ {&date_temp0, &day_temp0, &year_temp0 }, {&date_temp1, &day_temp1, &year_temp1} };


//如果我要取結構體初始化數組里的元素,是否可以用如下方法
unsigned int*  temp0;
temp0 = time[0]. datas; //實際上取出來的是指針,相當于temp0 = &date_temp0; 這個理解對嗎?


//如果我想取地址上的內容,如下
*(temp0) = *(time[0]. datas); //這種表示方法是否正確呢?還是應該這樣:*(temp0) = *(time[0]). datas;  ?


//結構體數組里面的成員可以相互賦值嗎?
比如:
*(time[0]. datas) = *(time[0]. days); //這樣是否可以?也就是相當于:*(&date_temp0) = *(&day_temp0); 這樣是否可以?



相信以上我遇到的問題一定也有其他人有這樣的疑惑,希望懂結構體和指針的大神不吝賜教!謝謝!
回復

使用道具 舉報

ID:415064 發表于 2022-5-12 18:31 | 顯示全部樓層
打印下不就好了?
回復

使用道具 舉報

ID:401564 發表于 2022-5-12 20:24 | 顯示全部樓層
用結構原本是想把事件搞得簡單一點,現在感覺好復雜
*(time[0]. datas) 這是把成員time[0]. datas的值用作指針了,指向哪里都不知道
*(time[0]. datas) = *(time[0]. days);先不管右邊的,你這個操作是對*(time[0]. datas) 指向的地址的操作
根本不是操作time[0]. datas,也就是說datas這個成員的值不會有任何改變的
又是指針,又是結構體,又是數組的,你自己從頭開始寫,還有點頭緒,旁人一看就覺得繞得暈.........
回復

使用道具 舉報

ID:656668 發表于 2022-5-13 01:00 | 顯示全部樓層
一、關于結構體

在C語言中,結構體(struct)指的是一種數據結構,是C語言中復合數據類型(aggregate data type)的一類。結構體可以被聲明為變量、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
結構體的定義如下所示:
struct tag { member-list } variable-list;
其中:
struct為結構體關鍵字;
tag為結構體的標志;
member-list為結構體成員列表,其必須列出其所有成員;
variable-list為此結構體聲明的變量。
在一般情況下:tag、member-list、variable-list這3部分至少要出現2個。
二、結構體常規定義
不同的定義,應用在不同場景,所以,我們編程時需要結合實際情況來定義結構體。
方法1:
定義結構體stu,此時結構體相當于一個類型,比如int,如需使用此結構體,方法同int.
struct stu{    char  aa;    short bb;    int   cc;};
struct stu stu1, stu2;
方法2:
定義結構體stu同時定義需要使用的結構體變量stu1, stu2。如后面再需要定義結構體變量,方法同1.
struct stu{    char  aa;    short bb;    int   cc;}stu1, stu2;
struct stu stu3;
方法3:
定義結構體時,結構體名稱缺省,同時定義結構體變量stu1,stu2。但后面不可再定義結構體變量。
struct{    char  aa;    short bb;    int   cc;}stu1, stu2;
三、使用typedef定義結構體
在C和C++編程語言中,typedef是一個關鍵字。它用來對一個數據類型取一個別名,目的是為了使源代碼更易于閱讀和理解。它通常用于簡化聲明復雜的類型組成的結構 ,但它也常常在各種長度的整數數據類型中看到,例如size_t和time_t。
方法4:
使用typedef定義結構體同時,給stu結構體別名STU,后續定義可不用使用struct stu,直接使用STU即可。
typedef struct stu{    char  aa;    short bb;    int   cc;}STU;
STU stu1;
方法5:
使用typedef定義結構體時,省掉結構體第一個別名stu,直接在后面加STU,使用方法同上。
typedef struct{    char  aa;    short bb;    int   cc;}STU;
STU stu1;
方法6:
typedef struct stu{    char  aa;    short bb;    int   cc;};
struct stu stu1;
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情一区二区 | 久久成人精品 | 91免费在线播放 | 性在线 | 亚洲一区二区久久久 | 亚洲一区中文字幕 | 中文字幕一区二区三区日韩精品 | 日本在线黄色 | 国产高清精品一区二区三区 | 欧美激情国产日韩精品一区18 | 精品在线看 | 一区二区三区高清 | 亚洲精品视频一区 | 久久国产精品无码网站 | 欧美国产精品 | 热99| 精品亚洲一区二区三区四区五区 | 99re视频在线 | 国产精品激情 | 81精品国产乱码久久久久久 | 91久久精品一区二区二区 | 国产久视频 | 嫩草研究影院 | 91在线色视频 | 精品久久久久久 | 激情av | 国产综合一区二区 | 国产情侣激情 | 亚洲精品福利视频 | 91精品国产91久久久久游泳池 | 午夜看看 | 永久av | 爱草在线 | 午夜激情小视频 | 久久久久国产一区二区 | 久久青青 | 久久视频精品 | 欧美成ee人免费视频 | 欧美日韩免费视频 | 三级在线观看 | 黑人一级片视频 |