首页 > 其他分享 >嵌入式初学-C语言-二五

嵌入式初学-C语言-二五

时间:2024-08-19 11:24:30浏览次数:8  
标签:定义 成员 数据类型 struct 嵌入式 二五 C语言 变量 结构

构造类型   

数据类型分类:

  1. 基本类型:
    1. 整数型
      1. 短整型:short(2字节)
      2. 整型:int(4个字节)
      3. 长整型:long(8个字节)
      4. 长长整型:long long
    2. 浮点型
      1. 单精度:float(4个字节)
      2. 双精度:double(8个字节)
    3. 字符型:char(1个字节)
  2. 指针类型
    1. 数据类型*:int*,char*,float*等
    2. void*:任意数据类型指针
  3. 空类型
    1. void:没有返回值或者没有形参(不能定义变量)
  4. 自定义类型/构造类型
    1. 结构体类型:struct
    2. 共用体类型(联合体):union
    3. 枚举类型:enum

注意:整数型和字符型分为有符号signed和无符号unsigned,默认时有符号,有符号可以省略关键字

结构体类型

定义:自定义数据类型的一种,关键字(struct),结构体类型的变量,可以存储多个不同数据类型的数据

定义格式:

struct 结构体名

{

       数据类型1 成员名称1;

       数据类型2 成员变量2;

       ……

}

注意:结构体中定义的变量称之为成员变量

格式说明:

  1. 结构体名:合法的标识符,建议单词的首字母大写
  2. 数据类型n:C语言支持的所以类型
  3. 成员名称:合法的标识符,就是变量的命名标准
  4. 数据类型n 成员名称n:类似于定义变量,定义了结构体中成员

注意:

  1. 结构体在定义的时候成员不能赋值
  2. 举例

 struct Cat

{ int age = 5;// 错误,结构体定义的时候,成员不能赋值

double height; // 正确

}

常见的定义格式:

  1. 方式一:常规定义(只定义类型)--推荐

  1. 方式二:定义匿名结构体(常用于作为其他结构体的成员使用)

       注意:定义匿名结构体类型的同时必须定义结构体变量,否则编译报错,结构体可以作为另一个结构体的成员

总结:

  1. 结构体可以定义在局部位置,也可以定义在全局位置
  2. 全局位置的结构体名和局部位置的结构体名可以相同,就近原则(和普通变量的定义同理)

结构体类型的使用:利用结构体类型定义变量,定义数组;结构体类型的使用与基本数据类型的使用类似

三种定义结构体变量:

结构体便改良也成为结构体实例

  1. 第一种:
    1. 先定义结构体
    2. 然后使用(ctruct结构体名 变量名)

  1. 第二种:
    1. 在定义结构体的同时定义结构体变量

此时定义了一个结构体A,x,y是这个结构体类型的变量

  1. 第三种:
    1. 在定义匿名结构体的同时,定义结构体变量

说明:此时定义了一个没有名字的结构体(匿名结构体),x,y是匿名结构体类型的变量

匿名结构体:弊大于利(尽量少用)

       优点:少写一个结构体名称

       缺点:只能使用一次;定义的结构体类型的同时必须定义变量

       应用场景:

  1. 当我们结构体的类型只需要使用一次,并且定义类型的同时定义变量
  2. 作为其他结构体的成员使用

定义结构体的同时,定义结构体变量初始化

  1. 结构体成员部分初始化时,大括号不能省略
  2. 如果赋值没有歧义,编译和运行没有问题
  3. 如果赋值推导有歧义,编译就会报错
  4. 结构体成员没有默认值,是不确定的数
/**
* 结构体变量的定义
*/
#include <stdio.h>
// 先定义结构体,再定义结构体变量
void fun1()
{
// 先定义结构体
struct A
{
int a;
char b;
};
// 再定义结构体变量
struct A x;
struct A y;
}
// 定义结构体的同时定义结构体变量
void fun2()
{
struct A
{
int a;
char b;
} x,y;
struct A z;
}
// 定义匿名结构体的同时定义结构体变量
void fun3()
{
struct
{
int a;
char b;
} x,y;
struct
{
int a;
char b;
} z;
}
int main()
{
fun1();
fun2();
fun3();
return 0;
}

结构体变量的使用

结构体变量访问结构体成员

格式:结构体变量名.成员名

1.可以通过访问给成员赋值(存数据)

2.可以通过访问获取成员值

结构体变量未初始化,结构体的成员值随机(不确定)

结构体变量在定义是可以初始化
  1. 建议用大括号标明数据的范围
  2. 结构体成员初始化时,可以部分初始化,部分初始化时,一定要带大括号表明数据的范围

案例:

/**
* 结构体变量的初始化
*/
#include <stdio.h>
/* 全局的结构体(数据类型) */
struct Dog
{
char *name;// 姓名
int age;// 年龄
char sex;// M:公,W:母
};
/* 先定义,再初始化 */
void fun1()
{
// 定义一个结构体
// struct Dog
// {
// char *name;// 姓名
// int age;// 年龄
// char sex;// M:公,W:母
// };
// 定义结构体变量
struct Dog dog;
// 给结构体变量的成员赋值
dog.name = "旺财";
dog.age = 5;
// 访问结构体变量的成员
printf("%s,%d,%c\n",dog.name,dog.age,dog.sex);
}
/* 定义的同时初始化 */
void fun2()
{
// 定义结构体变量并初始化
struct Dog dog = {"招财",23,'M'};
// 修改成员的值
dog.name = "进宝";
// 访问结构体变量的成员
printf("%s,%d,%c\n",dog.name,dog.age,dog.sex);
}
int main()
{
fun1();
fun2();
return 0;
}

标签:定义,成员,数据类型,struct,嵌入式,二五,C语言,变量,结构
From: https://blog.csdn.net/MaBaB/article/details/141305180

相关文章

  • c语言 小熊猫Dev cpp6.7.5版本bug
    问题描述:请看下面代码#include<stdio.h>#include<math.h>intmain(void){ intres=0; inti=2; res=pow(10,i); printf("%d",res); return0;}期望输出100,但是在pandaDevcpp6.7.5版本中会输出99在看下面的代码正确输出100#include<stdio.h>#include<ma......
  • Ruby在嵌入式系统:轻量级语言的灵活应用
    标题:Ruby在嵌入式系统:轻量级语言的灵活应用摘要在嵌入式系统开发领域,编程语言的选择至关重要,它直接影响到系统的性能、内存占用以及开发效率。Ruby,作为一种灵活且富有表现力的语言,其在嵌入式系统中的应用并不常见,但这并不意味着它没有一席之地。本文将探讨Ruby及其轻量级......
  • 【嵌入式linux开发】智能家居入门6:最新ONENET,物联网开放平台(QT、微信小程序、MQTT协议
    智能家居入门6:最新ONENET物联网开放平台前言最终现象一、ONENET云平台创建产品与设备二、使用MQTT客户端软件测试2.1测试前的准备2.2测试三、LInuxQT代码四、onenet云端API介绍及微信小程序代码4.1onenetAPI介绍4.2微信小程序代码五、板端运行前言ONENET云......
  • 利用C语言求字符串长度
    在C语言中库函数中已有求字符串长度的函数strlen,我们可以自己编写一个求字符串函数my_strlen求字符串长度注意:strlen函数返回类型是size_t,是无符号整型方法1:创建临时变量#include<stdio.h>intmy_strlen(char*str){   intcount=0;   while(*str!='\0......
  • 以c primer plus(第六版)为大纲的C语言初学手记,含示例代码及编程练习(第四章)
    //第4章//example4.1//#include<stdio.h>//#include<string.h> //toincludestrlrn()//#defineDENSITY62.4 //todefineaconstant//intmain()//{//   floatweight,volume;//   intsize,letters;//   charname[40]; //todeclareadig......
  • C语言基础- Hello World
    第一个C语言程序HelloWorld#include<stdio.h>//#关键标识符,表示用用头文件;include:引入都文件关键字 //stdio.h:系统标准输入、输出库对用的头文件。给printf函数服务 //<>:表示系统库函数,"":表示用户自定义库函数intmain(void) //int:函数返回值是整形数据......
  • C语言编程-GCC编译过程
    gcc编译预处理->编译->汇编->链接预处理gcc-Ehelloworld.c-ohelloworld.i头文件展开;不检查语法错误,即可以展开任意文件;宏定义替换;将宏名替换为宏值;替换注释;将注释替换为空行;展开条件编译;根据条件来展开指令;编译gcc-Shelloworld.i-ohelloworld.s逐行检查......
  • 嵌入式day30
    管道---半双工通信方式单工       //广播---单一方向的数据通道半双工        //对讲机---同一时刻只能有一个方向全双工        //手机电话---同一时刻两个方向都可以通信无名管道只能用于亲缘关系进程间有名管道是一种特殊......
  • 专题:C语言操作符详解
    ⽬录1.操作符的分类2.⼆进制和进制转换3.原码、反码、补码4.移位操作符5.位操作符:&、|、^、~6.单⽬操作符7.逗号表达式8.下标访问[]、函数调⽤()9.结构成员访问操作符10.操作符的属性:优先级、结合性11.表达式求值1.操作符的分类•算术操作符:+、-......
  • 嵌入式Linux系统中开机自启动方法
        在很多嵌入式系统中,由于可用资源较少,常常在系统启动后就直接让应用程序自动启动,以减少用户操作和节省资源。如何让自己的应用程序自动启动呢?1自启动的三种方式在Linux系统中,配置应用程序自动启动的方法有以下三种:1.1通过/Linuxrc脚本直接启动Linux内核一旦......