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.mzph.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…