C语言-定义与初始化总结

C语言中定义&声明的含义是什么?它们之间的区别又是什么?   在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名字和这块内存空间匹配, 那么在定义的这个对象或变量的生命周期中,所创建的这个变量名将不能再被改变,并且内存空间的位置也不会改变。在一个区域内(函数内,全局), 一个名字只能被定义一次,不能重复定义。   声明的含义:声明有两重含义   第一重含义:告诉编译器,这个名字已经匹... 阅读详情

1 实型

实型分为十进制小数类型和指数形式,其中指数形式,规定以字母e和E代表以10为底的指数,但应注意:e或E之前必须有数字,且e或E后面必须为整数。

  • 正确示例:12.34e3、-346.87e-25、0.145E-25、1.2e0、123e03
  • 错误示例:e4、12e2.5

2 标识符

除了变量名,后面还会讲到函数名、宏名、结构体名等,它们都是标识符。标识符只能由字母(A~Z, a~z)、数字(0-9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字。C语言标识符区分大小写。

  • 正确示例:a、x、x3、BOOK_1、sum5
  • 错误示例:3s、-3x、bowy-1、s*T

C语言虽然不限制标识符的长度,但是它受到不同编译器的限制,同时也受到操作系统的限制。例如在某个编译器中规定标识符前128位有效,当两个标识符前128位相同时,则被认为是同一个标识符。

3 变量

可以定义多个变量并为多个变量赋初值,如

int a, b, c=5; // 正确
int a=3, b=3, c=3; // 正确
int a=b=c=3; // 错误

4 一维数组

4.1 注意点

  • 数组大小可以使用常量或者符号常量,如int a[3+5];,但是不能使用变量,如int a[n];但C99支持这种做法。
  • 在被调用函数中定义数组,可以使用变量,如
void func(int n) {
	int a[2*n];
}
  • 如果指定数组为静态数组,则不能使用可变长数组,如static int a[2*n];就是错误的。

4.2 初始化

  • 在定义数组时对全部数组元素赋初值,如
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  • 可以对数组中一部分元素赋初值,则只给前五个元素赋值,后5个赋值0,如
int a[10] = {0, 1, 2, 3, 4};
  • 可以初始化全部为0,如
int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int a[10] = {0};
  • 初始化可以不指定长度,如
int a[] = {1, 2, 3, 4, 5};

5 二维数组

5.1 初始化

  • 分行给二维数组赋初值,如
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  • 可以将数据写在一个括号里赋初值,如
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
  • 可以对部分元素赋初值,这样对各行第一个元素赋初值,其他的为0,如
int a[3][4] = {{1}, {5}, {9}};
/*
    1 0 0 0
    5 0 0 0 
    9 0 0 0
*/
  • 可以对各行中某一元素赋初值,如
int a[3][4] = {{1}, {0, 6}, {0, 0, 11}};
/*
    1 0 0 0
    0 6 0 0 
    0 0 11 0
*/
  • 可以只对某行几个元素赋初值,如
int a[3][4] = {{1}, {5, 6}};
/*
    1 0 0 0
    5 6 0 0 
    0 0 0 0
*/
  • 也可以对其中一行不赋值,如
int a[3][4] = {{1}, {}, {9}};
/*
    1 0 0 0
    0 0 0 0 
    9 0 0 0
*/
  • 如果对全部元素赋初值,则一维长度可以省略,二者等价,如
int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
  • 可以只对部分元素赋初值并省略一维长度,如
int a[][4] = {{0, 0, 3}, {}, {0, 10}};
/*
    0 0 3 0
    0 0 0 0 
    0 10 0 0
*/

6 字符数组

6.1 初始化

  • 把各个字符依次赋值给数组,数量大于数组长度会报错,数量小于数组长度会将剩下的位置赋值为\0,如
char c[10] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'};
  • 二维字符数组,如
char c[2][3] = {{'y', 'o', 'u'}, {'a', 'r', 'e'}};
  • 用字符串常量来初始化字符数组,三者等价,此时系统会在末尾加上一个\0,所以实际长度会是字符串长度+1,若给定了字符数组的长度,而字符串长度小于字符数组定义长度,其余位置会赋值\0,如
char c[] = {"I am happy"};
char c[] = "I am happy";    // 可以省略花括号
char c[] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y', '\0'}; // 与上面等价

6.2 与字符指针的比较

  • 字符数组存放若干元素,字符指针存放字符串的首地址
  • 可以对字符指针赋值,但不能对数组名赋值,如
char *p;
p = "I love China"; // 正确

char c[14];
c = "I love China"; // 错误
c[14] = "I love China"; // 错误
  • 字符数组中各元素的值是可以改变的(可以再次赋值),字符指针指向的字符串常量是不能再次赋值的,如
char a[] = "china";
char *b = "china";
a[2] = 'r'; // 正确
b[2] = 'r'; // 错误

7 结构体

7.1 声明定义

  • 先声明,再定义,如
struct Student {
	char name[20];
	int age;
};
struct Student student1, student2; // 定义了两个Student结构体
  • 在声明类型的同时定义变量,如
struct Student {
	char name[20];
	int age;
}student1, student2;
  • 匿名结构体,直接定义变量,如
struct {
	char name[20];
	int age;
}student1, student2;

7.2 初始化

  • 定义结构体并初始化
struct Student {
	char name[20];
	int age;
}student1 = {"xiaoming", 20};
  • C99允许对某个成员初始化,则其他变量默认初始化0,如
struct Student student1={.age=12}; // 只对age进行初始化
  • 同类型结构体变量可以相互赋值,如
student1 = student2;
  • 定义结构体数组并初始化,如
struct Student {
	char name[20];
	int age;
}student[2] = {"xiaoming", 20, "lihao", 15};
  • 定义时初始化,如
struct Student student[2] = {"xiaoming", 20, "lihao", 15};

7.3 结构体指针

若struct Student *p = student1;,使用p->age代替(*p).age(.优先级大于*,括号不能省),以下三种写法等价

student1.age;
(*p).age;
p->age;

8 共用体

共用体union可以用一段内存存放不同类型的变量,它在每一瞬间只能存放其中一个成员,对共用体变量多次赋值,只保留最后一次赋值的值,共用体变量所占的内存长度等于最长的成员长度,初始化跟结构体有点像。

  • 声明并定义共用体,如
union Data {
	int i;
	char ch;
	float f;
}a, b, c;
  • 可以声明和定义分开,如
union Data {
	int i;
	char ch;
	float f;
};
union Data a, b, c;
  • 初始化方法,如
union Data {
	int i;
	char ch;
	float f;
}a = {1, 'a', 1.5}; // 错误,不能同时初始化3个
union Data a = {16}; // 正确
union Data a = {.ch='j'}; // 正确 C99新增
  • 对共用体赋值要指明赋值对象,如
a.ch = 'A'; // 正确
a.f = 1.5;  // 正确
a.i = 40;   // 正确
a = 1;      // 错误,没有指明赋值对象
  • C99 允许共用体之间相互赋值,允许共用体变量作为函数参数

9 枚举

如果变量有几种可能的值,则可以定义枚举,即把可能的值一一列举出来,变量的值只限于举例出来的值范围内,每一个枚举变量范围取值代表一个整数,从0开始递增。

  • 声明枚举类型,如
enum Weekday {sun, mon, tue, wed, thu, fri, sat};
  • 定义枚举类型,如
enum Weekday workday, weedkend;
  • 赋值,如
workday = mon; // 正确
workday = sun; // 正确
Weekday = monday; // 错误,monday不是范围类的取值
  • 可以人为的指定枚举元素的取值,如
enum Weekday {sun=7, mon=1, tue, wed, thu, fri, sat};
// sun=7, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6
  • 枚举元素可以用来做判断比较,通过初始化时的整数进行比较,如
if (workday == mon){} // 正确
if (workday > sun){} // 正确
高通410刷OpenWRT后网络共享配置全攻略 本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。 阅读详情

相关推荐

BGE(BAAI General Embedding)模型详解

BGE(BAAI General Embedding)是北京智源人工智能研究院(BAAI)推出的通用文本嵌入模型系列,旨在为各种自然语言处理任务提供高质量的向量表示。

ttyy1112的专栏 7555

什么是声明,什么是定义,什么是初始化

声明、定义和初始化是指变量的不同生命周期阶段

S0303828的专栏 2588

osgEarth添加线特征

部分关键代码: osgEarth::Annotation::FeatureNode* pathNode = 0; osgEarth::Symbology::Geometry* path = new osgEarth::Symbology::LineString(); Track*track = dynamic_cast<Track*>(entity->getProperty(PS_TRACK)); if (track == nullptr) { return; } st.

wb175208的专栏 2967

C语言---初始C语言

初始C语言分支循环语句、函数、数组、操作符、指针、结构体

m0_57776598的博客 2449

Streamlit安装避坑指南:从零到一键启动你的第一个数据可视化应用

本文提供了一份详尽的Streamlit安装避坑指南,帮助用户从零开始快速启动第一个数据可视化应用。文章深入剖析了安装过程中常见的网络超时、依赖冲突、环境变量缺失等核心问题,并给出了使用虚拟环境、配置国内镜像源、利用.whl文件离线安装等多种经过验证的解决方案,确保安装过程顺畅无阻。

weixin_29065015的博客 614

C语言常见问题——数组初始化的四种方法

有一回,小易同学对我说:“你学过编程吗”,我略略点一点头。他说,“学过编程,我便考一考你,在使用数组之前,应不应该初始化数组?”我暗想,这么简单的问题,也配考我么?不只是数组,在使用任何变量之前,都应该对变量进行初始化,这是一个编程的好习惯,可以有效避免许多由于垃圾值导致的bug。于是我回过脸去,不再理会。小易同学等了许久也不见我回答,很诚恳的说道,“不知道罢?我教给你,记着!......数组的初始化有4种写法——” 初始化列表、memset函数、指定初始化器、for循环

易水卷长空的博客 16万+

135、转动惯量辨识方法

<think>我们要求根据内容生成≤150字的文章摘要。内容是关于电机控制中转动惯量辨识的方法和工程经验。摘要需简洁概括核心:转动惯量重要性、三种方法(加减速法、正弦扫频、MRAS)、工程注意点(摩擦补偿、采样同步等)、实用建议(组合使用、滤波限幅、安全保护)。字数严格≤150。需要提炼。</think>转动惯量辨识是电机控制的关键,负载变化会导致速度环失稳。工程常用加减速法(简单可靠)、正弦扫频法(高精度)、MRAS在线辨识。实操需补偿摩擦、同步采样、控制激励幅度。建议混合使用,辨识结果需滤波限幅,并设置

2401_88858637的博客 39

数据类型---C语言变量的定义与初始化

1、 C语言中对于变量的要求:“先定义,后使用”。C语言定义变量的语句格式:数据类型 变量名[=初始数值]例如:char a;int x=2;2、 C语言要求在变量使用之前进行定义即可在codeblocks上还可这样写3、 C语言对变量作强制定义的目的:(1)未事先定义的不做变量名,能保证程序中变量名使用的正确例如:声明部分:int X;在执行部分:x=10;报错:error:'x' undeclared;...

m0_64529905的博客 1万+

把 ABAP ALV 做成可点、可改、可保存:Interactive Editable ALV Grid 的一套落地打法

文章摘要(148字): SAP ALV报表开发中,交互式可编辑网格的实用方案需解决三个核心问题:数据展示、交互下钻与编辑保存。本文以SCARR航空公司和SFLIGHT航班数据为例,演示如何实现双击主列表下钻明细、动态切换编辑模式、精确保存修改的技术路线。关键点包括:通过PF-STATUS添加业务按钮、使用CHECK_CHANGED_DATA同步前端修改、保护关键字段避免误操作,以及变更数据的审计跟踪方法。该方案适用于SAP GUI环境下的快速业务调整需求,相比Fiori开发具有更高的实施效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 228

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5681

C语言中的声明、定义、初始化

声明 变量声明规定了变量的类型和名字1 基本形式 任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。2 说明符(一个或多个) 声明表达式列表3 变量声明 int a; unsigned int a; 函数声明 int max() 一个返回值为int类型的函数 指针声明 int *p p是int*型 如果按上一句,p是int*类型,那么有意思的是为什么指针声明不是 int* a; The syntax of the declaration for a

CCPigSnail 5630

带有HSE组件的S32系列芯片中各子系统如何依次启动?

仔细阐述了上电后各个子系统的启动顺序,并给出了详细的启动步骤流程图。

车载系统攻城狮 1702

【c 语言】结构体的定义格式及变量初始化

一结构体的基本定义格式 结构体变量的初始化

m0_74195174的博客 7187

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C语言一维数组的定义及初始化

文章目录1. 定义一维数组2. 一维数组初始化 1. 定义一维数组 一般形式: 类型说明符 数组名[常量表达式] eg: int a[10]; 下标从0开始,这10个元素是从a[0]~a[9] 类型说明符:指定数组中元素的类型 ,a中所有元素都是int类型的 数组名命名规则和变量名相同,遵循标识符命名规则(字母数字下划线组成,数字不开头) 常量表达式可以包含常量和符号常量,eg:int a[3+5]; 2. 一维数组初始化 定义数组时,对元素赋初值 * 对全部元素赋值 eg : in

weixin_44904482的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C语言】结构体变量定义、初始化、使用

前言 本文中出现的 strcpy()函数需引入 string.h 头文件。 #include <string.h> 一、声明“结构体类型” struct students { char name[20]; int age; }; 其中 struct 是声明结构体类型的关键字,students 是“结构体名”,又称为“结构体标记” ,用于区别其他结构体类型。 二、定义结构体变量 structstudents 整体是“结构体类型名”,在定义结构体类型的变量时,s...

KinglakeINC的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c语言宏定义数组_C语言——数组的定义和初始化

点击蓝字关注我们什么是数组数值是,相同数据类型有序的,连续的存储集合。int main(void){ int a =0; in b =20; int c = 50; int d =78; //分配内存时,abcd4个变量不一定有序的连续}//定义数组,定义10个类型相同,连续,有序存储的数组int arr[ 10 ] = { 2,4,6,8,5,3,1,9,...

weixin_39752788的博客 5514

c语言定义不定长数组初始化_数组的定义,初始化和使用,C语言数组详解

数组可以说是目前为止讲到的第一个真正意义上存储数据的结构。虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限。不仅如此,数组和指针(后续会讲)是相辅相成的,学习数组可以为学习指针打下基础。那么到底什么是数组呢?顾名思义数组就是很多数的组合!那么这些数有没有什么要求呢,是不是不管什么数组合在一起都是数组呢?同一数组中存储的数必须满足以下两个条件:这些数的类型必须相同。这些数在内存中必须是连续...

weixin_39611666的博客 2514

C语言结构体的定义和初始化介绍

C语言结构体的定义和初始化介绍

匠心码农 874

c语言怎么变量初始化,C语言基础教程之如何定义变量!

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:type variable_list;在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号...

weixin_42515841的博客 7247

C语言:数组的定义与初始化

C语言:数组的定义与初始化

qq_48516121的博客 1771

C语言中变量在不同位置的定义及初始化

C语言中变量在不同位置的定义及初始化C语言中变量在不同位置的定义及初始化C语言中变量的定义情景一:.h中定义变量并初始化情景二:.h中定义变量但不初始化情景三:.h中定义static变量,并初始化/不初始化参考博客链接: C语言中变量在不同位置的定义及初始化 问题引入 // mian.c int b; int b; int main() { return 0; } 运行结果:成功。 // main.cpp #include <iostream> int b; int b; i

BeanGuohui的博客 960

C语言指针的定义、初始化和引用

指针是C语言中强大而灵活的特性,它允许直接访问内存中的数据,提高了程序的灵活性和效率。理解指针的定义、初始化和引用等基本概念,有助于程序员编写出更加灵活、高效的C语言程序。指针提供了一种间接访问内存的方式,允许程序直接操作内存中的数据。本文将介绍指针的定义、初始化和引用的基本概念和用法。指针是一种特殊的变量,其存储的值是内存地址。在C语言中,NULL指针是一个特殊的指针,表示指针不指向任何有效的地址。通过指针引用内存中的数据可以使用解引用运算符`*`,它表示指针所指向地址中存储的值。

2401_83379409的博客 979

c语言定义不定长数组初始化_C语言不定长数组及初始化方法

C语言不支持不定长数组,要么malloc,要么在动态的指定它的长度动态数组不能初始化,可使用memset1.int* p = (int*)malloc(num);2.int num = 5;arr[num];若使用arr[],则需要在后面对齐进行初始化,来指定长度,否则编译可以通过,但是默认只有一个单元,超过一个单元的长度,在后面程序的运行中有可能会被冲掉int arr[] = {0};//定义了...

weixin_39631301的博客 3613

C语言结构体定义与初始化

/这种写法是产生struct Node类型,再对这个类型重命名,加指针把这个结构体指针重命名为linklist。typedef struct Node//定义struct Node 同时对struct Node*重命名linklist。//s1,s2是根据这个结构体类型创建的两个结构体变量,是struct Stu类型的。//声明类型同时定义变量p1,也可以同时对p1初始化。struct//这种没有名字的叫匿名结构体类型,只能使用一次。//声明类型同时定义变量p1。//s1, s2是全局变量。

TNTxd的博客 149

c语言定义不定长数组初始化_C语言——数组的定义和初始化

什么是数组数值是,相同数据类型有序的,连续的存储集合。int main(void){int a =0;in b =20;int c = 50;int d =78; //分配内存时,abcd4个变量不一定有序的连续}//定义数组,定义10个类型相同,连续,有序存储的数组int arr[ 10 ] = { 2,4,6,8,5,3,1,9,7,10 };//printf("arr[0] = %d\...

weixin_39846378的博客 349
上一篇: C语言-文件操作总结
下一篇: C语言-转义字符注意事项
syzdev
博客等级 码龄9年 852粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值