C语言-变量与数据类型

一、基本语法

1、注释

注释(Comments)可以出现在代码中的任何位置,用来向用户提示或解释代码的含义。程序编译时,会忽略注释,不做任何处理。

C 语言有两种注释方式:

(1)单行注释

以 // 开始的单行注释,这种注释可以单独占一行。

// 单行注释

(2)多行注释

/* */ 这种格式的注释可以单行或多行。

/* 多行注释多行注释多行注释*/

注意:不能在注释内嵌套注释。

2、C 标识符

标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。名字不能随便起,要遵守规范;C语言规定:

一个标识符只能由字母(A-Z, a-z )、数字(0-9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字。

注意:

  • C 标识符内不允许出现标点字符,比如 @、$ 和 %。
  • C 是区分大小写的编程语言。

3、关键字

关键字(Keywords)是由C语言规定的具有特定意义的字符串,通常也称为保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

标准C语言中一共规定了32个关键字。

二、C 变量

变量其实是程序可操作的存储区的名称。

C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称满足 C 标识符规定的。

C 语言允许定义各种其他类型的变量,比如枚举、指针、数组、结构、共用体等等。下面看看几种基本的变量类型:

在这里插入图片描述

1、变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。
变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表。

基本格式如下:type variable_list;

  • type:表示变量的数据类型,可以是整型、浮点型、字符型、指针等,也可以是用户自定义的对象。
  • variable_list:可以由一个或多个变量的名称组成,多个变量之间用逗号,分隔。

示例如下:

定义整型变量:
int age; //age 被定义为一个整型变量。定义浮点型变量:
float salary;// salary 被定义为一个浮点型变量。定义字符型变量:
char grade;// grade 被定义为一个字符型变量。定义指针变量:
int *ptr; // ptr 被定义为一个整型指针变量。定义多个变量:
int i, j, k; // 声明并定义了类型为 int的三个变量 i、j 和 k。

2、变量初始化

在 C 语言中,变量的初始化是在定义变量的同时为其赋予一个初始值。变量的初始化可以在定义时进行,也可以在后续的代码中进行。

初始化器由一个等号,后跟一个常量表达式组成,这个过程叫做赋值(Assign)。赋值是指把数据放到内存的过程。

基本格式如下:

type variable_name = value; // 变量定义并初始化
或者
type variable_name; // 变量定义
variable_name = new_value; // 变量初始化

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

示例如下:

    int x = 10;         // 整型变量 x 初始化为 10float pi;       // 浮点型变量pi定义pi = 3.14159;   // 变量pi初始化为3.14159char ch;        // 字符型变量ch定义ch = 'B';       // 变量ch初始化为字符'B'extern int d, f;d = 3;f = 5;    // d 和 f 的声明与初始化int d2 = 3, f2 = 5;           // 定义并初始化 d 和 fbyte z = 22;                // 定义并初始化 z

注意:变量在使用之前应该被初始化。未初始化的变量的值是未定义的,可能包含任意的垃圾值。因此,为了避免不确定的行为和错误,建议在使用变量之前进行初始化。

3、变量不初始化

在 C 语言中,如果变量没有显式初始化,那么它的默认值将取决于该变量的类型和其所在的作用域。
对于全局变量和静态变量(在函数内部定义的静态变量和在函数外部定义的全局变量),它们的默认初始值为零。

下面是不同类型的变量在没有显式初始化时的默认值:

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

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

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

4、C 中的变量声明

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

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

示例如下:

extern int i; //声明,不是定义
int i2; //声明,也是定义

注意:除非有extern关键字,否则都是变量的定义。

实例:变量在头部就已经被声明,但是定义与初始化在主函数内:

#include <stdio.h>// 函数外定义变量 x 和 y
int x;
int y;int addtwonum() {// 函数内声明变量 x 和 y 为外部变量extern int x;extern int y;// 给外部变量(全局变量)x 和 y 赋值x = 1;y = 2;return x + y;
}int main() {int result;// 调用函数 addtwonumresult = addtwonum();printf("result 为: %d", result); //result 为: 3return 0;
}

三、C 数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。

C 中的类型可分为以下几种:

在这里插入图片描述

数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。

下面了解基本类型。

1、整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

在这里插入图片描述
注意:各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

以下列出了32位系统与64位系统的存储大小的差别(windows 相同):

在这里插入图片描述

示例如下:

#include <stdio.h>
#include <limits.h>int main() {printf("int 存储大小 : %lu \n", sizeof(int)); // int 存储大小 : 4 return 0;
}
  • %lu 为 32 位无符号整数

2、浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

在这里插入图片描述

头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。

示例如下:

#include <stdio.h>
#include <float.h>int main() {printf("float 存储最大字节数 : %lu \n", sizeof(float));printf("float 最小值: %E\n", FLT_MIN);printf("float 最大值: %E\n", FLT_MAX);printf("精度值: %d\n", FLT_DIG);return 0;
}
  • %E 为以指数形式输出单、双精度实数。

在这里插入图片描述

3、void 类型

void 类型指定没有可用的值。它通常用于以下三种情况下:

在这里插入图片描述

4、数据的长度(Length)

数据长度(Length)是指数据占用多少个字节。占用的字节越多,能存储的数据就越多。

数据是放在内存中的,变量是给这块内存起的名字,有了变量就可以找到并使用这份数据。

多个数据在内存中是连续存储的,彼此之间没有明显的界限,如果不明确指明数据的长度,计算机就不知道何时存取结束。

所以,在定义变量时还要指明数据的长度。而这恰恰是数据类型的另外一个作用。数据类型除了指明数据的解释方式,还指明了数据的长度。因为在C语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型,也就知道了数据的长度。

4.1 sizeof 运算符

为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。

表达式 sizeof(type) 得到对象或类型的存储字节大小。

示例如下:

#include <stdio.h>
#include <limits.h>int main() {printf("int 存储大小 : %lu \n", sizeof(int));printf("char 存储大小 : %lu \n", sizeof(char));printf("float 存储大小 : %lu \n", sizeof(float));printf("double 存储大小 : %lu \n", sizeof(double));printf("short 存储大小 : %lu \n", sizeof(short));printf("long 存储大小 : %lu \n", sizeof(long));return 0;
}

在这里插入图片描述

5、类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值。C 语言中有两种类型转换:

(1)隐式类型转换

隐式类型转换是在表达式中自动发生的,无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型。

例如,将int类型转换为long类型或float类型转换为double类型。隐式类型转换也可能会导致数据精度丢失或数据截断。

示例如下:

int i = 10;
float f = 3.14;
double d = i + f; // 隐式将int类型转换为double类型

(2)显式类型转换

显式类型转换需要使用强制类型转换运算符(type casting operator),它可以将一个数据类型的值强制转换为另一种数据类型的值。

强制类型转换可以使程序员在必要时对数据类型进行更精确的控制,但也可能会导致数据丢失或截断。

示例如下:

double d = 3.14159;
int i = (int)d; // 显式将double类型转换为int类型

参考文章:

  • C语言的关键字:https://blog.csdn.net/weixin_44614083/article/details/122310811
  • 菜鸟教程:https://www.runoob.com/cprogramming/c-data-types.html

– 求知若饥,虚心若愚。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3+单基因泛癌+铜死亡纯生信思路

今天给同学们分享一篇3单基因泛癌铜死亡纯生信思路的生信文章“Systematic pan-cancer analysis identifies SLC31A1 as a biomarker in multiple tumor types”&#xff0c;这篇文章于2023年3月27日发表在BMC Med Genomics 期刊上&#xff0c;影响因子为3.622。 溶质载体家族3…

【Unity】简单的深度虚化shader

【Unity】简单的深度虚化shader 实现效果 可以用于对地图场景边界的白模处理 实现方法 1.关键方法 UnityObjectToClipPos&#xff1a;将物体坐标转换为屏幕坐标 LinearEyeDepth&#xff1a;将屏幕坐标中的z值转换为实际的深度值 saturate&#xff1a;将值规范到0~1之间&a…

【AI视野·今日Robot 机器人论文速览 第四十一期】Tue, 26 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 26 Sep 2023 Totally 73 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Extreme Parkour with Legged Robots Authors Xuxin Cheng, Kexin Shi, Ananye Agarwal, Deepak Pathak人类可以通过以高度动态…

成为吃鸡战场的王者!分享顶级战术干货,助您提高战斗力!

各位吃鸡战场的玩家们&#xff0c;欢迎来到本视频&#xff01;在这里&#xff0c;我将为您呈现一些与众不同的吃鸡干货&#xff0c;帮助您提高战斗力、轻松吃鸡&#xff01; 首先&#xff0c;让我们谈一谈作图工具推荐。绝地求生作图工具是吃鸡玩家们的必备利器。我将给大家推荐…

IDEA运行第一个Java简单程序(新建项目到运行类)

目录 前言 一、准备工作 JDK下载安装 1.IDEA下载安装 二、IDEA建立项目 &#xff08;一&#xff09;新建项目&#xff08;银河系&#xff09; &#xff08;二&#xff09;新建模块&#xff08;地球&#xff09; &#xff08;三&#xff09;新建包&#xff08;国家&#…

1.3python基础语法——PyCharm

1&#xff09;PyCharm的作用 python的集成开发环境&#xff0c;功能如下&#xff1a; Project管理 智能提示 语法高亮 代码跳转 调试代码 解释代码(解释器) 框架和库 2&#xff09;下载与安装 下载地址&#xff1a;http://www.jetbrains.com/pycharm/download/#sectionwind…

查询表中的全部列的数据

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select from * 表名; 说明: * 表示所有列 由于不写where子句&#xff0c;表示无条件&#xff0c;找到所有的行&#xff01; 准备工作:执…

【计算机网络笔记九】I/O 多路复用

阻塞 IO 和 非阻塞 IO 阻塞 I/O 和 非阻塞 I/O 的主要区别&#xff1a; 阻塞 I/O 执行用户程序操作是同步的&#xff0c;调用线程会被阻塞挂起&#xff0c;会一直等待内核的 I/O 操作完成才返回用户进程&#xff0c;唤醒挂起线程非阻塞 I/O 执行用户程序操作是异步的&#xf…

909. 蛇梯棋

909. 蛇梯棋 题目-中等难度示例1. bfs 题目-中等难度 给你一个大小为 n x n 的整数矩阵 board &#xff0c;方格按从 1 到 n2 编号&#xff0c;编号遵循 转行交替方式 &#xff0c;从左下角开始 &#xff08;即&#xff0c;从 board[n - 1][0] 开始&#xff09;每一行交替方向…

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(四)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存5. 模型评估6. 模型测试1&#xff09;权限注册2&#xff09;模型导入3&#xff09;总体模型构建4&#xff09;处理视频中的预览帧数据5&#xff09;处理图片数…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档&#xff0c;如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

程序启动-大数据平台搭建

1、启动zookeeper集群 /home/cluster/zookeeper.sh start /home/cluster/zookeeper.sh stop 2、启动hadoop和yarn集群 /home/cluster/hadoop-3.3.6/sbin/start-dfs.sh /home/cluster/hadoop-3.3.6/sbin/start-yarn.sh /home/cluster/hadoop-3.3.6/sbin/stop-dfs.sh /home/clust…

Java括号匹配

目录 一、题目描述 二、题解 一、题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭…

AG35学习笔记(二):安装编译SDK、CMakeLists编译app、Scons编译server

目录 一、概述二、安装SDK2.1 网盘SDK - 权限不够2.2 bj41 - 需要交叉source2.3 mullen - relocate_sdk.py路径有误 三、编译SDK3.1 /bin/sh: 1: gcc: not found3.2 curses.h: No such file or directory 四、CMakeLists - 编译app4.1 cmake - 项目构建4.2 make - 项目编译4.3 …

计算机图像处理:图像轮廓

图像轮廓 图像阈值分割主要是针对图片的背景和前景进行分离&#xff0c;而图像轮廓也是图像中非常重要的一个特征信息&#xff0c;通过对图像轮廓的操作&#xff0c;就能获取目标图像的大小、位置、方向等信息。画出图像轮廓的基本思路是&#xff1a;先用阈值分割划分为两类图…

如何修复wmvcore.dll缺失问题,wmvcore.dll下载修复方法分享

近年来&#xff0c;电脑使用的普及率越来越高&#xff0c;人们在日常生活中离不开电脑。然而&#xff0c;有时候我们可能会遇到一些问题&#xff0c;其中之一就是wmvcore.dll缺失的问题。wmvcore.dll是Windows平台上用于支持Windows Media Player的动态链接库文件&#xff0c;如…

命运2中文wiki搭建记录——MediaWiki安装与初设置

命运2中文wiki搭建记录 本文转自我的博客&#xff0c;原文地址——>命运2中文wiki搭建记录——MediaWiki安装与初设置 可能是出于闲的发霉&#xff0c;想自己搭建一个命运2wiki。 因为bilibili上的命运2Bwiki也全是自己搭的。指路——>命运2Bwiki 但是当自己实际上手Me…

windows系统删除网络适配器

此电脑&#xff0c;右键&#xff0c;管理 打开本机设备管理器 其中找到网络适配器&#xff1a; 选中要删除的&#xff0c;右键点击“卸载设备”&#xff0c;点击卸载即可完成。

控价与数据分析的关系

品牌在做线上控价时&#xff0c;会面对许多的数据&#xff0c;如店铺数据、行业数据&#xff0c;当这些数据仅仅只是拿来做监测低价输出低价报表使用&#xff0c;是没有发挥其最大作用的&#xff0c;因为商品链接的字段较丰富&#xff0c;涉及的内容会包含销量、评价量、促销信…

Linux:理解进程的多种状态

文章目录 理解状态运行状态阻塞状态挂起状态Linux系统下的进程状态的解析状态的查看 本篇总结的是进程的多种状态 对于进程的状态理解&#xff0c;在教材上通常是有下面的思维模式图 那么如何理解上面图片中的内容&#xff1f; 理解状态 如何理解状态&#xff1f;其实理解状…