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){} // 正确
卷积操作复杂度公式推导 复杂度Hout⋅Wout⋅Cout⋅Cin⋅k2\text{复杂度} = H_{\text{out}} \cdot W_{\text{out}} \cdot C_{\text{out}} \cdot C_{\text{in}} \cdot k^2复杂度Hout​⋅Wout​⋅Cout​⋅Cin​⋅k2该公式反映了卷积核作用于每个像素时的局部操作和跨通道的计算需求。卷积计算复杂度与输入尺寸线性相关。 阅读详情

相关推荐

(实战)[re:Invent 2018]-001:赛道分析-(致敬1024)

打印log

Rainbow 2779

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

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

S0303828的专栏 2588

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

kercii的博客 7350

C语言---初始C语言

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

m0_57776598的博客 2449

量化爬虫第一步:手把手教你搞定同花顺问财的hexin-v参数(附JS逆向实战)

本文详细介绍了如何通过JS逆向技术破解同花顺问财数据接口的核心加密参数hexin-v,构建稳定可靠的量化数据采集方案。从抓包分析到Cookie Hook技术应用,再到环境补全与参数生成实现,手把手教你完成量化爬虫的第一步。文章还提供了实战注意事项与优化建议,帮助开发者规避常见问题。

weixin_42620202的博客 302

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 868

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

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

易水卷长空的博客 16万+

工业级24V电源保护电路深度解析:五重防护机制详解

自恢复保险丝(PPTC,Positive Temperature Coefficient)是一种过流保护元件✅可恢复:过流后自动恢复,无需更换⚡响应快:电流超标立即动作🔄多次使用:在额定范围内可反复使用第1层(F1):阻挡过流 → 物理熔断第2层(D3):吸收浪涌 → 能量泄放第3层(Q1):防止反接 → 逻辑阻断第4层(Q2/Q3):抵御过压 → 主动切断第5层(CR):平滑启动 → 时序控制设计哲学:"让每一级保护专注做好一件事"通过这篇文章,我们深入理解了:✅自恢复保险丝。

qq_58068673的博客 3567

数据类型---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万+

SAP 与 Palantir 合作全景解析:这不是普通集成,而是把 ERP、数据语义层、云迁移与企业级 AI 串成一条价值链

SAP与Palantir的战略合作聚焦企业数字化转型核心痛点,通过深度技术整合构建"数据-决策-执行"闭环。合作包含四大主线:云迁移连续性保障、SAP业务数据云与Palantir平台对接、联合工程开发、高监管行业优先落地。技术实现上采用SAP认证插件,支持双向数据交互和实时业务动作触发。该合作突破了传统ERP系统局限,将业务语义与AI执行相结合,特别适合制造业供应链优化、财务争议处理等高价值场景,为企业在云迁移过程中实现业务连续性与智能化升级提供新范式。

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

AIGC算法工程师面试八股文深度解析与进阶指南:揭秘Diffusion Models核心原理与实战技巧

总结来说,Cosine Noise Scheduler 的核心优势在于它能够更巧妙地平衡信号和噪声的比例,在扩散过程的早期阶段更长时间地保留原始图像的细节信息,从而为去噪模型提供一个更友好的学习环境,最终带来更优异的生成质量。🚀

FJN110的博客 344

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

华为OD机试:使用Ascend C语言实现Matmul与LeakyReLU融合算子的全流程设计与优化解析

通过本文的详细解析,相信你已经对华为OD机试中基于Ascend C语言的Matmul+LeakyReLU融合算子的设计与实现有了深入的理解。我们不仅从理论上探讨了融合算子的核心优势,还通过实际的代码示例演示了如何一步步完成算子的实现与优化。融合算子在AI算子开发中的应用,尤其是在处理大规模矩阵计算的场景中,能够显著提升计算效率,优化内存占用,并减少数据传输的开销。通过合理的Tiling策略设计,我们还能够充分利用多核处理器的算力,进一步提升AI模型的训练与推理性能。

qq_38334677的博客 661

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

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

m0_74195174的博客 7187

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

KinglakeINC的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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、付费专栏及课程。

余额充值