C 变量

news2025/1/20 5:56:52

目录

1.  C变量

2.  C变量定义

2.1  变量初始化

2.2  C中的变量声明

3.  C中的左值(Lvalues)和右值(Rvalues)


1.  C变量

在C语言中,变量可以根据其类型分为以下几种基本类型:

  1. 整型变量:用于存储整数值,包括 intshortlong 等类型。
  2. 浮点型变量:用于存储带有小数部分的数值,包括 floatdouble 类型。
  3. 字符型变量:用于存储单个字符,使用 char 类型。
  4. 指针变量:用于存储内存地址,可以指向其他变量或数据,使用 * 符号声明。
  5. 数组变量:用于存储一系列相同类型的数据,使用 [ ] 符号声明。
  6. 结构体变量:用于存储多个不同类型的数据作为一个整体,使用 struct 关键字声明。
  7. 枚举变量:用于定义一组命名的整数常量,使用 enum 关键字声明。

        这些基本类型的变量可以根据需要进行声明和定义,并且可以通过运算符进行操作。在C语言中,变量的名称可以由字母、数字和下划线组成,但必须以字母或下划线开头。另外,C语言是大小写敏感的,因此大写字母和小写字母被视为不同的字符。有以下几种基本的变量类型:

类型描述
char通常是一个字节(八位), 这是一个整数类型。
int整型,4 个字节,取值范围 -2147483648 到 2147483647。
float

单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。

double

双精度浮点值。双精度是1位符号,11位指数,52位小数。

void表示类型的缺失。

2.  C变量定义

        在C语言中,变量定义用于告诉编译器如何为特定类型的变量分配存储空间。变量定义通常包括数据类型和一个或多个变量名的列表。

其基本形式如下:

type variable_list;

type 表示变量的数据类型,可以是整型、浮点型、字符型、指针等,也可以是用户自定义的对象。

variable_list 可以由一个或多个变量的名称组成,多个变量之间用逗号,分隔,变量由字母、数字和下划线组成,且以字母或下划线开头。

下面是一个简单的示例:

int a, b, c; // 定义了三个整型变量a、b、c
float x, y; // 定义了两个浮点型变量x、y
char ch; // 定义了一个字符型变量ch

        在上面的示例中,intfloatchar 是数据类型,后面紧跟的是变量名列表。这些定义告诉编译器要为这些变量分配适当大小的存储空间,并且按照定义的顺序依次进行分配。

        需要注意的是,变量定义只是告诉编译器如何创建变量的存储,实际上并没有为变量分配初始值。如果需要给变量赋初值,可以使用赋值语句进行初始化,例如:

int a = 10; // 定义整型变量a,并赋初值为10
float x = 3.14; // 定义浮点型变量x,并赋初值为3.14
char ch = 'A'; // 定义字符型变量ch,并赋初值为字符'A'

        这样就可以在定义变量的同时给它们赋予初始值。

2.1  变量初始化

        在C语言中,变量的初始化可以在定义时进行,也可以在后续的代码中进行。当你在定义变量的同时为其赋予一个初始值时,可以使用初始化器来实现。初始化器使用等号(=)将变量名和初始值连接起来,如下所示:

type variable_name = value;

        其中,type 表示变量的数据类型,variable_name 是变量的名称,value 是变量的初始值。

以下是一些示例:

int a = 10; // 定义整型变量a,并将其初始化为10
float x = 3.14; // 定义浮点型变量x,并将其初始化为3.14
char ch = 'A'; // 定义字符型变量ch,并将其初始化为字符'A'

        在上面的示例中,变量的定义与初始化是同时进行的,通过初始化器将变量名和初始值连接起来。这样,在变量定义完成后,变量就被赋予了初始值。

        需要注意的是,变量的初始化值必须与变量的数据类型兼容。例如,整型变量只能被初始化为整数值,浮点型变量只能被初始化为浮点数值,字符型变量只能被初始化为字符值。

        此外,如果在定义变量时没有使用初始化器,那么变量将不会被自动初始化,其初始值将是未知的。在这种情况下,如果在后续的代码中使用未初始化的变量,可能会导致不可预测的结果。

后续初始化变量:

在变量定义后的代码中,可以使用赋值运算符 = 为变量赋予一个新的值。

type variable_name;    // 变量定义
variable_name = new_value;    // 变量初始化

例如:

int x;          // 整型变量x定义
x = 20;         // 变量x初始化为20
float pi;       // 浮点型变量pi定义
pi = 3.14159;   // 变量pi初始化为3.14159
char ch;        // 字符型变量ch定义
ch = 'B';       // 变量ch初始化为字符'B'

变量不初始化:

        在C语言中,变量没有显式初始化时会有默认值,这些默认值取决于变量的类型和作用域。

        全局变量和静态变量(包括在函数内部定义的静态变量和在函数外部定义的全局变量)的默认初始值为零。

具体来说:

  • 整型变量(如int、short、long等)的默认值为0。
  • 浮点型变量(如float、double等)的默认值为0.0。
  • 字符型变量(char)的默认值为'\0',即空字符。
  • 指针变量的默认值为NULL,表示指针不指向任何有效的内存地址。
  • 对于数组、结构体、联合等复合类型的变量,它们的元素或成员会按照相应的规则进行默认初始化,这可能包括对元素递归应用默认规则。

        需要注意的是,局部变量(在函数内部定义的非静态变量)不会自动初始化为默认值,它们的初始值是未定义的,也就是包含垃圾值。因此,在使用局部变量之前,应该显式地为其赋予一个初始值。

        总结起来,C语言中变量的默认值取决于其类型和作用域。全局变量和静态变量的默认值为0,字符型变量的默认值为'\0',指针变量的默认值为NULL,而局部变量没有默认值,其初始值是未定义的。

2.2  C中的变量声明

        变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

变量的声明有两种情况:

  • 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
  • 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。
  • 除非有extern关键字,否则都是变量的定义。

3.  C中的左值(Lvalues)和右值(Rvalues)

C 中有两种类型的表达式:

  1. 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
  2. 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

Visual Studio编辑器左侧菜单栏不小心关掉如何打开(左侧解决方案资源管理器不显示如何打开)、C语言中int main和void main的区别以及C工程的创建_visual studio2022 资源管理器怎么打开桌面面板-CSDN博客

Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1416105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥小白赛4 乘飞机 抽屉原理 枚举

👨‍🏫 乘飞机 🐷 抽屉原理 import java.util.Scanner;public class Main {static int N 100010;static int[] a new int[N];public static void main(String[] args){Scanner sc new Scanner(System.in);int n sc.nextInt();int q s…

(南京观海微电子)——OLED驱动与调试

一、OLED DDIC分类 OLED DDIC的技术方向可以分为3类:带Ram【内存】的IC、Ram-less IC和TDDI【显示&触控集成的IC】 1、带Ram的OLED DDIC OLED DDIC有两个Ram,分别是Demura Ram和Display Ram。 1、带Ram的OLED DDIC 1-1)Demura Ram&a…

取消Vscode在输入符号时自动补全

取消Vscode在输入符号时自动补全 取消Vscode在输入符号时自动补全问题演示解决方法 取消Vscode在输入符号时自动补全 问题演示 在此状态下输入/会直接自动补全, 如下图 笔者想要达到的效果为可以正常输入/而不进行补全, 如下图 解决方法 在设置->文本编辑器->建议, 取消…

C语言第十一弹---函数(下)

​ ✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 函数 1、嵌套调用和链式访问 1.1、嵌套调用 1.2、链式访问 2、函数的声明和定义 2.1、单个文件 2.2、多个文件 2.3、static 和 extern 2.3.1、static…

STM32+ESP8266 实现物联网设备节点

目录 一、硬件准备 二、编译环境 三、源代码地址 四、说明 五、测试方法 六、所有测试工具和文档 本项目使用stm32F103ZEesp8266实现一个物联网的通信节点,目前支持的协议有mqtt,tcp。后续会持续更新,增加JSON,传感器&#…

MySQL 聚集与非聚集索引

文章目录 1.聚集索引1.1 介绍1.2 优点1.3 缺点 2.非聚集索引3.区别参考文献 MySQL 中,根据索引树叶结点存放数据行还是数据行的地址,可以将索引分为两类: 存放数据行:聚集索引存放数据行地址:非聚集索引 InnoDB 使用聚…

VSCode 1.85.0更新的3个实用功能

1、单个文件可直接拖拽为独立窗口 当单文件过长,直接分成两个视图就不用上下频繁滚动 2、将终端移动到编辑器区域 此时,终端也可像文件一样拖拽为独立窗口 3、文件夹目录粘性头部 默认关闭,需要设置 "workbench.tree.enableStickyScro…

【Linux】编写第一个小程序:进度条

文章目录 1. 预备知识1.1 简单认识几个函数1.1.1 sleep()1.1.2 fflush()1.1.3 usleep()1.1.4 memset() 1.2 缓冲区1.3 回车与换行 2. 编写入门版的进度条2.1 基本逻辑2.2 美化效果2.3 代码实现2.4 执行效果 3. 编写升级版的进度条3.1 代码实现3.2 执行效果 1. 预备知识 1.1 简…

php项目中laravel框架下用postman调用接口实战总结

一.项目接口实战总结: 1.传参赋值错乱问题,如下: SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from cars where company_id 3345 and status ! 7 and user_id in (2148, 2060, 2061, 2432, 2136, 1970, 1987, 202…

Spark Exchange节点和Partitioning

​Exchange 在explain时,常看到Exchange节点,这个节点其实就是发生了数据交换 此图片来自于网络截取 BroadcastExchangeExec 主要是用来广播的 ShuffleExchangeExec 里面决定了数据分布的方式和采用哪种shuffle 在这里可以看到好几种不同的分区器 shuf…

shell 脚本 点菜啦

#!/bin/bash sum0 PS3"请输入(1-6):" MENU" 宫保鸡丁 酸菜鱼 鱼香肉丝 佛跳墙 水煮肉片 点菜结束 "select menu in $MENU do case $REPLY in 1) echo $menu 价格是20 let sum20 ;; 2) echo $menu 价格是60 let sum60 ;;3) echo $menu 价格是25 let sum25 ;…

在linux上进行编译调试

1.相关疑问 1. 为什么在代码里使用了一个未定义过的函数(如add()),在编译阶段不会报错,在链接阶段会报错呢? 答:先说几个代码编译的结论: 单个\.c源文件文件被编译成机器码文件时&#xff0c…

如何把openwrt的ipk软件包安装到ubuntu上

前提:都是arm64的架构的软件包。 下载openwrt的ipk软件包 1. 从https://pkgs.org/ 查找下载软件包: 本文以swconfig软件包为例,下载swconfig和相关的依赖软件包: swconfig_12_aarch64_cortex-a72.ipk libuci20130104_2021-10-2…

认识与探索大模型时代的RPA应用及进化(上)

AI Agent当前仍然处于技术爬坡与实验阶段,特别是在企业领域,真正的成熟应用还处于广泛探索与原型验证阶段,离成熟还尚待时日。而同时另外一种在最近几年广受欢迎的自动化解决方案-RPA(机器人流程自动化)也在LLM时代不断…

python使用迭代生成器yield减少内存占用的方法

嗨喽,大家好呀~这里是爱看美女的茜茜呐 在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。 其实这本没有必要,因为这些参量很有可能是一次性使用的, 甚至很多场景下这些参量是不需要同时存储在内存中的&…

IM-CNN

SHAP means ‘Shapley additive explanation’ 辅助信息 作者未提供代码

基于ncurse的floppy_bird小游戏

1. 需求分析 将运动分解为鸟的垂直运动和杆的左右运动。 2. 概要设计 2.1 鸟运动部分 2.2 杆的运动 3. 代码实现 #include <stdio.h> #include <ncurses.h>#include <stdlib.h> #include <time.h>int vx 0; int vy 1;int bird_r; int bird_c;int…

HTML5和CSS3的新特性

HTML5的新特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等 1&#xff0c;HTML5新增的语义化标签 <header> 头部标签 <nav> 导航标签 <article> …

1 月 28日算法练习-前缀和

小郑的蓝桥平衡串 思路&#xff1a;把 L 看成 1&#xff0c;Q 看成 -1&#xff0c;利用前缀和来得到输入串的前缀子串中LQ 的和&#xff0c;利用前缀和差的性质得到子串&#xff0c;通过枚举看它是否平衡。 将L看做1&#xff0c;Q看做&#xff0d;1&#xff0c;只有当某个区间…

Django实战

一、开发登录表单 def login_form(request):html <html><body><form method"post">用户名:<input name "username" type"text"></input></br>密码&#xff1a;<input name "password" type…