C语言-变量与数据类型

news2024/11/17 15:26:18

一、基本语法

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 初始化为 10
    float pi;       // 浮点型变量pi定义
    pi = 3.14159;   // 变量pi初始化为3.14159
    char ch;        // 字符型变量ch定义
    ch = 'B';       // 变量ch初始化为字符'B'
    extern int d, f;
    d = 3;
    f = 5;    // d 和 f 的声明与初始化
    int d2 = 3, f2 = 5;           // 定义并初始化 d 和 f
    byte 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;
    // 调用函数 addtwonum
    result = addtwonum();

    printf("result 为: %d", result); //result 为: 3
    return 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.coloradmin.cn/o/1047348.html

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

相关文章

【Verilog 教程】6.4Verilog竞争与冒险

关键字&#xff1a;竞争&#xff0c;冒险&#xff0c;书写规范 产生原因 数字电路中&#xff0c;信号传输与状态变换时都会有一定的延时。 在组合逻辑电路中&#xff0c;不同路径的输入信号变化传输到同一点门级电路时&#xff0c;在时间上有先有后&#xff0c;这种先后所形成…

面试题:Java8 lambda 表达式 forEach 如何提前终止?

文章目录 1.情景展示2.原因分析3.解决方案方案一&#xff1a;使用原始的foreach循环方式一&#xff1a;break方式二&#xff1a;return(不推荐使用) 方案二&#xff1a;抛出异常 1.情景展示 如上图所示&#xff0c;我们想要终止for循环&#xff0c;使用return。 执行结果如下&…

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

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

python+vue电子资源管理系统

能实现不出家门就可以通过网络进行系统管理&#xff0c;交易等&#xff0c;而且过程简单、快捷。同样的&#xff0c;在人们的工作生活中&#xff0c;也就需要互联网技术来方便人们的日常工作生活&#xff0c;实现工作办公的自动化处理&#xff0c;实现信息化&#xff0c;无纸化…

1.物联网射频识别

1.RFID概念 RFID是Radio Frequency Identification的缩写&#xff0c;又称无线射频识别&#xff0c;是一种通信技术&#xff0c;可通过无线电讯号识别特定目标并读写相关数据&#xff0c;而无需与被识别物体建立机械或光学接触。 RFID&#xff08;Radio Frequency Identificati…

传染病学模型 | Python实现基于SIR模型分析Covid19爆发

效果一览 文章概述 传染病学模型 | Python实现基于SIR 模型分析Covid19爆发 源码设计 import jax.numpy as npimport matplotlib.pyplot

向量数据库库Milvus Cloud2.3 运维可靠,秒级故障恢复

Milvus 2.3.0 已经发布有一段时间了,正如二选一的选择题总会让人陷入纠结一般,不少社区用户反馈对于选择 Milvus 2.2.x 还是 Milvus 2.3.x 犹豫不已。 对此,我们的回答是:强烈建议升级至 Milvus 2.3.x 版本。 为什么?在回答此问题之前,先回顾一下近一年来业界发生了哪些变…

RabbitMQ的基本介绍

什么是MQ 本质是一个队列&#xff0c;只不过队列中存放的信息是message罢了&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递信息。在互联网架构中&#xff0c;MQ是一种非常常见的上下游“逻辑解耦物理解耦”的消息通信服务。使用了MQ之后&#xff0c;信息发送…

Flutter笔记:滚动之-无限滚动与动态加载的实现

Flutter笔记 无限滚动与动态加载的实现 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133342307 本文还…

C++的内存管理和模板

文章目录 一、内存管理1.内存的分布2.C中的动态内存管理3.重载new和重载delete4.new和delete的实现原理5.定位new 二、模板1.泛型编程2.函数模板1.定义模板2.实例化模板3.模板类型的参数4.非类型模板参数 3.类模板1.定义模板2.实例化模板3.模板的成员函数 总结 一、内存管理 1…

蓝桥杯每日一题2023.9.27

4408. 李白打酒加强版 - AcWing题库 题目描述 题目分析 对于这题我们发现有三个变量&#xff0c;店&#xff0c;花&#xff0c;酒的数量&#xff0c;对于这种范围我们使用DP来进行分析。 dp[i][j][k]我们表示有i个店&#xff0c;j朵花&#xff0c;k单位酒的集合&#xff0c…

逆向入门及实战

一、逆向工程介绍 1.1 什么是逆向工程 提到逆向工程可能大多数人第一印象就是非道德层面的软件破解&#xff0c;其实不然&#xff0c;逆向工程又称为逆向技术&#xff0c;是一种产品设计技术再现过程&#xff0c;即对一项目产品进行逆向分析及研究&#xff0c;从而演绎并得出该…

git 过滤不需要提交的目录和文件

项目根目录下&#xff08;.git同级目录&#xff09;添加.gitignore文件 .DS_Store .idea npm-debug.log yarn-error.log /node_modules /log/**.log /config.js

【2023年11月第四版教材】第15章《风险管理》(合集篇)

第15章《风险管理》&#xff08;合集篇&#xff09; 1 章节说明2 管理基础2.1 风险的属性2.2 风险的分类★★★2.3 风险成本★★★2.4 管理新实践 3 管理过程4 管理ITTO汇总★★★5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★…

第一次作业题解

第一次作业题解 P5717 【深基3.习8】三角形分类 思路 考的是if()的使用,还要给三条边判断大小 判断优先级&#xff1a; 三角形&#xff1f;直角、钝角、锐角等腰等边 判断按题给顺序来 代码 #include <stdio.h> int main() {int a 0, b 0, c 0, x 0, y 0, z 0…

使用vpn/代理后电脑无法正常上网

有时候当我们关闭VPN后&#xff0c;却发现不能正常连接到互联网了。 解决步骤&#xff1a; 办法一&#xff1a; 1. 找到右下角wifi图标&#xff0c;鼠标右键点击然后点击网络和Internet 设置 2. 进入控制面板选择代理 3. 将自动检测打开&#xff0c;把使用代理服务器关闭 办法…

【C++入门指南】类和对象(上)

【C杂货店】类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…

【Java 进阶篇】使用 SQL 进行排序查询

在数据库中&#xff0c;我们经常需要对查询的结果进行排序&#xff0c;以便更容易地理解和分析数据。SQL&#xff08;Structured Query Language&#xff09;提供了强大的排序功能&#xff0c;允许我们按照指定的列对数据进行升序或降序排序。本文将详细介绍如何使用 SQL 进行排…

windows系统删除网络适配器

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

玩转Mysql系列 - 第24篇:如何正确的使用索引?

这是Mysql系列第24篇。 学习索引&#xff0c;主要是写出更快的sql&#xff0c;当我们写sql的时候&#xff0c;需要明确的知道sql为什么会走索引&#xff1f;为什么有些sql不走索引&#xff1f;sql会走那些索引&#xff0c;为什么会这么走&#xff1f;我们需要了解其原理&#…