c語言基礎知識_結構體訪問,共同體,枚舉類型

C語言結構體變量的引用:
  對于定義的結構體類型的普通變量,訪問其成員用圓點運算符(“.”),標準訪問方式如下:
  結構體變量名.成員名
  對于定義為指向結構體的指針變量,用箭頭運算符(“->”)訪問,標準的訪問形式如下:
  指向結構體的指針變量名->成員名
  當出現結構體嵌套時,訪問結構體成員
  指向結構體的指針變量名 -> 次結構體名 .成員名
例如:
定義
typedef struct mystruct{
int i;
char *p;
struct *temp{
int a;
int *b;
}
}MYDEV;
MYDEV mydev1;
MYDEV *mydev2;
則有以下幾種引用方式:
1)組
mydev1.i和mydev1.p
mydev2->i和mydev2->p
2)組
mydev1.temp->a和mydev1.temp->b
mydev2->temp->a和mydev2->temp->b



實例:


#include "stdafx.h"
#include <windows.h>
//#include "log.h"
#include "msglog.h"
#include "stdlib.h"

int b;
typedef? struct? _Atmp
{
?? ?int d;
?? ?int *e;
} Atmp;
typedef struct? _Bdata
{
?? ?int a;
?? ?char *s;
?? ?struct Ctmp
?? ?{
?? ??? ?int b;
?? ??? ?int c;
?? ?} FF ;
?? Atmp *atmp;
?? Atmp EE;
?
} dataA, *dataB;

int _tmain(int argc, _TCHAR* argv[])
{
?? int X=3,Y=5;
?? ?dataA *A=(dataA *)malloc(sizeof(dataA));
?? ?memset(A,0,sizeof(A));
?? ?A->a=0;
?? ?A->s="Test A!";
?? ?//A.tmp.b=X;
?? ?//A.tmp.c=Y;
?? ?A->atmp = (Atmp *)malloc(sizeof(Atmp));
?? ?A->atmp->d=X;

?? ?A->atmp->e=&Y;
??? A->FF.b=X;
?? ?A->EE.d=X;
?? ?A->EE.e=&Y;

?? ?dataA B;
?? ?B.a=X;
?? ?B.s="TEST B";
?? ?B.FF.b=X;
?? ?B.FF.c=X;
?? ?B.EE.d=X;
?? ?B.EE.e=&Y;
?? ?B.atmp=(Atmp *)malloc(sizeof(Atmp));
?? ?B.atmp->d=X;
?? ?B.atmp->e=&Y;
? ?


?? ?dataB C=(dataB)malloc(sizeof(dataB));
?? ?memset(C,0,sizeof(dataB));
?? ?C->a=X;
?? ?C->s="Test C";
?? ?C->FF.b=X;
?? ?C->FF.c=X;

?? ?C->atmp=(Atmp *)malloc(sizeof(Atmp));
?? ?C->atmp->d=X;

?? ?C->atmp->e=&Y;
?? ?C->EE.d=X;
?? ?C->EE.e=&Y;
?? ? return 0;
}

枚舉類型:

#include "stdafx.h"
#include "msglog.h"
#define A_TEST_a

typedef enum _CHAR_TYPE
{
?A_TEST,
?B_TEST,
?C_TEST,
?D_TEST
} CHAR_TYPE;

int _tmain(int argc, _TCHAR* argv[])
{
?int a,b;
?a=3;b=4;
?

#ifdef A_TEST
?? a=5;
#endif

enum _CHAR_TYPE AA=A_TEST;;

switch(AA)
{
case A_TEST:a=10;break;

}?

LOG(LEVEL_INFO,"AA=%d\n",a);

CHAR_TYPE BB=B_TEST;

switch(BB)
{
? case B_TEST: a=15; break;

? case C_TEST: a=20;

? default: a=30;

}

LOG(LEVEL_INFO,"BB=%d\n",a);

int AB=3;

switch(AB)
{
case D_TEST :a=40;break;
}

LOG(LEVEL_INFO,"AB=%d\n",a);

int c=20;
CHAR_TYPE CC=(CHAR_TYPE)20; //數值強制轉化為枚舉類型才能賦值

return 0;

結果:

?AA=10
BB=15
AB=40

?

結構體重常用的指針轉換

#include "stdio.h"
#include "string.h"
#define? NumSize 100
typedef struct _test
{
?int a;
??
} test;

typedef struct _testA
{
?
?int c;
?int d;
?char a[NumSize];
} testA;

int main()
{
?
?testA bb,dd;
???
?int cc;
?bb.c=10;//bb.d=20;
?bb.a[1]='A';
?// bb.a[]="abc";//錯誤

?test *aa;
?aa=(test *)&bb;//記住地址需要轉換

?printf(" aa->a =%d \n",aa->a);

?static char c[]="BASIC_dBASE";

?char b[80]="Study C Programme!\n";

?printf("c[]=%s \n",c);

?printf("b[100]= %s \n",b);
?
??? memset(bb.a,0,sizeof(char)*NumSize);
?memcpy(bb.a,b,sizeof(char)*strlen(b));
?printf("bb.a = %s \n",bb.a);
??? // dd.a=b; //錯誤

?char *ff;
?ff="abc";
?printf(" ff = %s \n",ff);

?int *gg,kk;
?gg =(int *)&bb;
?kk =*(int *)&bb;
?printf(" gg = %d ,kk= %d\n",*gg,kk);

?

?int *gg,kk;
?gg =(int *)&bb;?//指針轉換
?kk =*(int *)&bb;
?printf(" gg = %d ,kk= %d\n",*gg,kk);

?char *s="keil is wv \n";
//?s[1]='z'; //s為棧內指針,指向常量存儲區,所以不能改變常量存儲區的值
?printf(" s = %s \n",s);
?char sz[]="keil is wv\n";
??? sz[2]='s';//sz為棧內指正,同時指向的字符串同樣是在棧內,所以能夠用此方式改變變量值
?printf(" sz = %s \n",sz)


?return 0;
?return 0;
?
}

結果:

aa->a =10
c[]=BASIC_dBASE
b[100]= Study C Programme!
bb.a = Study C Programme!

?ff=abc;

?

gg =?10 ,kk=10

?

s = keil is wv

sz = kesl is wv

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254481.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Wiener Filter維納濾波器halcon算子,持續更新

目錄gen_psf_defocusgen_psf_motionsimulate_defocussimulate_motionwiener_filterwiener_filter_nigen_psf_defocus 功能&#xff1a;產生一個均勻散焦模糊的脈沖相應。 gen_psf_motion 功能&#xff1a;產生一個&#xff08;線性&#xff09;運動模糊的脈沖相應。 simula…

【轉載】數據庫操作:添加、插入、更新語句

原始日期&#xff1a; 2016-07-22 12:03 SQL常用命令使用方法&#xff1a;(1) 數據記錄篩選&#xff1a;sql"select * from 數據表 where 字段名字段值 order by 字段名 [desc]"sql"select * from 數據表 where 字段名 like %字段值% order by 字段名 [desc]&qu…

webpack學習

全局安裝安裝webapck npm i webpack -g 現在我們就可以全局的使用webpack命令了 webpack中基礎的命令&#xff1a; webpack enter.js output.js --watch 這個命令是將enter.js打包成output.js&#xff0c;然后html只需要引用該文件就可以了看如下entry.js,這是簡單的js代碼。 /…

3D 相機halcon算子,持續更新

目錄add_scene_3d_cameraadd_scene_3d_instanceadd_scene_3d_labeladd_scene_3d_lightclear_scene_3dcreate_scene_3ddisplay_scene_3dget_display_scene_3d_inforemove_scene_3d_cameraremove_scene_3d_instanceremove_scene_3d_labelremove_scene_3d_lightrender_scene_3dset…

Selenium 中文API

Selenium 中文API 轉自&#xff1a;http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通過命令進行驅動。Selenium 可歸納為三種“風格”&#xff1a;動作、輔助和斷言。每一個命令調用就是下表中的一行。 命令 目標 值 動作(Actions)命令一般用于操作應用…

C# 特性(Attribute)

個人定義&#xff1a;不侵入對象的情況下&#xff0c;添加對象附注信息。 官方定義&#xff1a;將預定義的系統信息或用戶定義的自定義信息與目標元素相關聯。目標元素可以是程序集、類、構造函數、委托、枚舉、事件、字段、接口、方法、可移植可執行文件模 塊、參數、屬性 (…

收集js庫的網站

https://www.javascripting.com/view/redux

c語言中有關void,sizeof,結構體的一些問題

void[1]&#xff1a;void是C語言中的空類型&#xff0c;void的用途有二。 1、對函數返回的限定&#xff1b; 如果函數沒有返回值&#xff0c;則默認返回整數類型&#xff0c;而不是void類型。c有很嚴格的類型&#xff0c;不允許函數不加類型聲明&#xff0c;而編譯器則不這么認…

Drawing繪圖halcon算子,持續更新

目錄drag_region1drag_region2drag_region3draw_circledraw_circle_moddraw_ellipsedraw_ellipse_mod_draw_linedraw_line_moddraw_nurbsdraw_nurbs_interpdraw_nurbs_interp_moddraw_nurbs_moddraw_pointdraw_point_moddraw_polygondraw_rectangle1draw_rectangle1_moddraw_re…

搞明白這八個問題,Linux系統就好學多了

正在猶豫入坑Linux學習的同學或者已經入坑的同學&#xff0c;經常會問到這樣八個問題。今天&#xff0c;這些問題我都會一一解答&#xff0c;希望我的看法能幫助各位同學。常言道“好的開始是成功的一半”&#xff0c;如果你明白了以下八個問題&#xff0c;就能有一個很好的開始…

從ORA-27300,ORA-27301到ORA-00064

近期因為session數量添加&#xff0c;須要調整session&#xff0c;也就是要調整process參數。看是比較簡單的一個問題&#xff0c;卻遭遇了ORA-27300&#xff0c;ORA-27301。因為這個涉及到了有關內核參數kernel.sem的改動。以下是其詳細描寫敘述。1、故障現象OS版本號&#xf…

Halcon|讀取3D相機點云數據

Halcon|讀取3D相機點云數據 最近發現很多小伙伴在使用Halcon處理3D工業相機掃描結果的時候遇到了“如何讀取”的問題。一般的3D工業相機儲存數據的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。 txt格式 讀取txt文件生成3D模型一般需要分析txt文件…

FFMPEG解碼流程

1. 注冊所有容器格式和CODEC: av_register_all() 2. 打開文件: av_open_input_file() 3. 從文件中提取流信息: av_find_stream_info() 4. 窮舉所有的流&#xff0c;查找其中種類為CODEC_TYPE_VIDEO 5. 查找對應的解碼器: avcodec_find_decoder() 6. 打開編解碼器: avcodec_open…

linux用戶登錄指定目錄

一、創建用戶和用戶組 [rootweb4 lianyu]# groupadd lianyu [rootweb4 lianyu]# useradd lianyu -g lianyu [rootweb4 lianyu]# passwd lianyu二、用戶登錄指定目錄 [rootweb4 lianyu]# cd /home/lianyu [rootweb4 lianyu]# ls -a . .. .bash_history .bash_logout .bas…

轉載:說一下AI的前景吧

發信人: wdong (萬事休), 信區: Stock標 題: 說一下AI的前景吧這一波AI和前兩年的big data&#xff0c;根本就是兩回事。big data這一波&#xff0c;主要是用數據分析來支撐起各種現有系統的改進&#xff0c;包括銷售業績的提高和用戶體驗的提高等。AI當然也可以應用回這些領域…

藥片粘連物體的分割

藥片粘連物體的分割要求&#xff1a;圖片&#xff1a;處理程序&#xff1a;處理結果&#xff1a;要求&#xff1a; 將藥片分割&#xff0c;統計藥片數量。不能使用模板匹配。 圖片&#xff1a; 先看一下要處理的原圖&#xff1a; 處理程序&#xff1a; read_image (Image…

FFMPEG CODEC使用總結

分類&#xff1a; 視頻編解碼技術 2010-07-15 10:29 283人閱讀 評論(0) 收藏 舉報 ffmpeg里提供了很多的encoder&#xff0c;decoder&#xff0c;詳見avcodec.h里的枚舉變量CodecID。 宏定義 #define REGISTER_ENCODER(X,x) { / extern AVCodec x##_encoder; / …

java 鏈接mysql 產生500W數據模擬生成環境

java 插入數據到mysql 通過sqoop 導入到hive 中&#xff0c;kylin模擬見cube 時間和 數據膨脹率 kylin 數據插入到 HBase Kylin HBase 1.1.3 Hive 1.2.1 Hadoop 2.5.1 create table infoagetime( prod_name char(10), prod_id SMALLINT, ods_date DATE )數據格式 oPmgBZxldW …

中本聰研究所創始人對Core的發展方向感到厭惡

在本月&#xff0c;中本聰研究所&#xff08;Satoshi Nakamoto Institute&#xff09;的聯合創始人Daniel Krawisz離開了該研究所&#xff0c;原因是Daniel覺得SNI社區逐漸變得讓他無法忍受&#xff0c;甚至感到厭惡。Daniel發表在SNI上的大量文章被刪除&#xff0c;有關于比特…

BZOJ 1026 [SCOI2009]windy數

1026: [SCOI2009]windy數 Description windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。 windy想知道&#xff0c;在A和B之間&#xff0c;包括A和B&#xff0c;總共有多少個windy數&#xff1f; Input 包含兩個整數&#xff0c;A B。 Outp…