「C系列」C 数据类型

文章目录

  • 一、C 数据类型-介绍
    • 1. 基本数据类型:
    • 2. 派生数据类型:
    • 3. 限定符:
    • 4. 函数类型:
    • 5. 类型定义(typedef):
    • 6. 位字段(Bit-fields):
  • 二、C 数据类型-案例
    • 1. 基本数据类型
      • 整数类型
      • 浮点类型
    • 2. 派生数据类型
      • 指针类型
      • 数组类型
      • 结构体类型
    • 3. 类型定义(typedef)
  • 三、C void 类型、类型转换
    • 1. void 类型
    • 2. 类型转换
  • 四、相关链接

一、C 数据类型-介绍

在C语言中,数据类型定义了存储在内存中的数据的种类以及可以进行的操作。C语言支持多种数据类型,这些类型可以大致分为以下几类:

1. 基本数据类型:

  • 整数类型(Integer Types):
    char:通常用于存储字符,但在C中它本质上是一个整数类型,可以存储小的整数。
    short:短整数。
    int:整数。
    long:长整数。
    long long:长长整数(C99标准引入)。
  • 浮点类型(Floating-Point Types):
    float:单精度浮点数。
    double:双精度浮点数。
    long double:扩展双精度浮点数(不是所有的编译器都支持)。
    void:表示“无类型”,主要在函数返回类型、指针类型和通用指针中使用。

2. 派生数据类型:

  • 指针类型(Pointer Types):用于存储内存地址,如 int *ptr; 表示 ptr 是一个指向整数的指针。
  • 数组类型(Array Types):用于存储固定数量的同类型元素,如 int arr[10];。
  • 结构体类型(Structure Types):用于将不同类型的元素组合成一个单一的类型,如 struct Student { int id; char name[50]; };。
  • 联合体类型(Union Types):与结构体类似,但所有成员共享同一块内存区域,如 union Data { int i; float f; };。
  • 枚举类型(Enumeration Types):用于定义变量可以取的值,如 enum Days { SUN, MON, TUE, WED, THU, FRI, SAT };。

3. 限定符:

  • signed 和 unsigned:用于修饰整数类型,表示是否有符号。默认情况下,char、short、int 和 long 都是 signed 的,但 char 的符号性取决于编译器和平台。
  • const:用于声明一个常量,即其值在程序执行期间不能被修改。
  • volatile:告诉编译器不要对该变量的访问进行优化,因为变量的值可能会以编译器无法预见的方式改变。

4. 函数类型:

用于声明函数的返回类型,如 int main(void); 中的 int 就是函数类型。

5. 类型定义(typedef):

使用 typedef 可以为数据类型定义新名称,使得代码更易读和维护。例如,typedef int Integer; 使得 Integer 成为 int 的别名。

6. 位字段(Bit-fields):

位字段是结构体中的一个特殊成员,允许程序员指定其占据的确切位数。这在需要控制硬件接口或节省空间时非常有用。

在编写C程序时,选择正确的数据类型对于程序的效率和正确性至关重要。

二、C 数据类型-案例

在C语言中,数据类型决定了存储在内存中的数据的种类以及可以对这些数据执行的操作。以下是一些C语言数据类型的简要描述以及相关的案例代码。

1. 基本数据类型

整数类型

  • char:通常用于存储字符,但在C中它本质上是一个小的整数类型。
  • short:短整数。
  • int:整数。
  • long:长整数。
  • long long:长长整数(C99标准引入)。

案例代码

#include <stdio.h>int main() {char c = 'A';short s = 1000;int i = 20000;long l = 1000000L;long long ll = 123456789012345LL;printf("char: %c\n", c);printf("short: %d\n", s);printf("int: %d\n", i);printf("long: %ld\n", l);printf("long long: %lld\n", ll);return 0;
}

浮点类型

  • float:单精度浮点数。
  • double:双精度浮点数。
  • long double:扩展双精度浮点数(不是所有的编译器都支持)。

案例代码

#include <stdio.h>int main() {float f = 3.14f;double d = 3.141592653589793238;// long double ld = ...; // 如果你的编译器支持,可以使用 long doubleprintf("float: %f\n", f);printf("double: %lf\n", d);// printf("long double: %Lf\n", ld); // 如果你的编译器支持,可以使用 %Lf 格式化输出return 0;
}

2. 派生数据类型

指针类型

案例代码

#include <stdio.h>int main() {int x = 10;int *ptr = &x; // ptr 是一个指向整数的指针,存储了 x 的地址printf("Value of x: %d\n", x);printf("Address of x: %p\n", &x);printf("Value of ptr (address of x): %p\n", ptr);printf("Value pointed by ptr: %d\n", *ptr);return 0;
}

数组类型

案例代码

#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

结构体类型

案例代码

#include <stdio.h>struct Student {int id;char name[50];float score;
};int main() {struct Student s = {1, "Alice", 90.5f};printf("ID: %d, Name: %s, Score: %.1f\n", s.id, s.name, s.score);return 0;
}

3. 类型定义(typedef)

案例代码

#include <stdio.h>typedef int Integer;int main() {Integer i = 10;printf("Value of i: %d\n", i);return 0;
}

以上案例代码涵盖了C语言中常见的数据类型以及如何使用它们。注意,在不同的系统和编译器上,整数类型(如intlong等)的确切大小和范围可能会有所不同。因此,在编写可移植代码时,可能需要使用stdint.h头文件中定义的确切宽度的整数类型(如int32_tint64_t等)。

三、C void 类型、类型转换

在C语言中,void 类型和类型转换是两个重要的概念。我将分别解释它们:

1. void 类型

void 在C语言中表示“无类型”或“空类型”。它主要有两种用途:

  1. 函数返回类型:如果一个函数不返回任何值,那么它的返回类型就是 void。例如:
void print_hello() {printf("Hello, World!\n");
}

这个函数不返回任何值,所以它的返回类型是 void
2. 指针类型void 指针是一个通用指针类型,它可以指向任何数据类型。但是,你不能直接解引用一个 void 指针,因为它没有类型信息。你通常需要将它转换为其他类型的指针才能解引用。例如:

void* ptr = malloc(10 * sizeof(int)); // 使用 void* 类型的 ptr 来接收 malloc 返回的内存地址
int* int_ptr = (int*)ptr; // 将 void* 转换为 int* 以便操作内存中的整数

在这个例子中,malloc 函数返回一个 void 指针,它指向分配的内存。然后我们将这个 void 指针转换为 int 指针,以便我们可以将这块内存当作整数数组来使用。

2. 类型转换

类型转换在C语言中是一种显式或隐式的操作,用于将一个数据类型的值转换为另一个数据类型的值。有两种主要的类型转换:

  1. 隐式类型转换(也称为自动类型转换或类型提升):当表达式中的操作数类型不同时,编译器会自动将它们转换为相同的类型,以便进行计算。这种转换通常是向更大或更复杂的类型进行转换。例如:
int i = 5;
double d = i; // 隐式地将 int 转换为 double

在这个例子中,整数 i 被隐式地转换为 double 类型,然后赋值给 d
2. 显式类型转换(也称为强制类型转换):程序员可以使用强制类型转换运算符 () 来显式地将一个类型的值转换为另一个类型的值。例如:

double d = 3.14;
int i = (int)d; // 显式地将 double 转换为 int,注意这会丢失小数部分

在这个例子中,我们将 double 类型的 d 显式地转换为 int 类型,并将结果赋值给 i。注意,这种转换可能会导致数据丢失或精度下降。

类型转换在C语言中是一个强大的工具,但也需要谨慎使用,以避免类型错误或数据丢失。

四、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C系列」C 简介
  4. 「C系列」C 基本语法

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

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

相关文章

35【Aseprite 作图】苹果——拆解

1 叶子是&#xff0c;竖着4&#xff0c;然后2 1 竖2&#xff1b;左边是1 2 横着2&#xff1b;然后横着连接 之后画苹果&#xff0c;4 3 1 1 1 &#xff0c;竖着8 2 1 1 1 2 横着5&#xff1b;之后水平翻转&#xff08;苹果左右一样&#xff09; 2 加上浅绿做底色 3 阴影部分 …

Redis-03

Redis常用命令 1. SET key value: 设置指定 key 的值为 value。 2. GET key: 获取指定 key 的值。 3. DEL key: 删除指定 key 及其对应的值。 4. KEYS pattern: 查找所有符合给定 pattern 的 key。 5. EXISTS key: 判断指定 key 是否存在。 6. INCR key: 将指定 key 的值增加 …

C语言 | Leetcode C语言题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; typedef struct {int key;UT_hash_handle hh; }Hash; int longestConsecutive(int* nums, int numsSize) {Hash* headNULL;Hash* tempNULL;for(int i0;i<numsSize;i){int numnums[i];HASH_FIND_INT(head,&num,temp);if(!temp){temp…

HCIP的学习(27)

RSTP—802.1W—快速生成树协议 STP缺陷&#xff1a; 1、收敛速度慢----STP的算法是一种被动的算法&#xff0c;依赖于计时器来进行状态变化 2、链路利用率低​ RSTP向下兼容STP协议。&#xff08;STP不兼容RSTP&#xff09; 改进点1—端口角色 802.1D协议---根端口、指定端口…

驾校-短视频营销招生精品课:抖音推广技巧,抖音短视频招生(41节课)

课程下载&#xff1a;驾校-短视频营销招生精品课&#xff1a;抖音推广技巧&#xff0c;抖音短视频招生(41节课)-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 课程目录 [1]-第1课驾校为什么要全力做好短视频营销.mp4 …

Vue3-watch监听ref和reactive数据的五种情况及watchEffect

何为watch&#xff1a; 文档定义&#xff1a; 用于声明在数据更改时调用的侦听回调。 watch 选项期望接受一个对象&#xff0c;其中键是需要侦听的响应式组件实例属性 (例如&#xff0c;通过 data 或 computed 声明的属性)——值是相应的回调函数。该回调函数接受被侦听源的新…

Word2021中的The Mathtype DLL cannot be found问题解决(office 16+mathtype7+非初次安装)

问题描述&#xff0c;我的问题发生在word中无法使用自定义功能区中的mathtype 我的环境是&#xff1a;W11Word2021mathtype7 因为我是第二次安装mathtype7&#xff0c;所以我怀疑是因为没有卸载干净&#xff0c;于是我参考了下面这篇文章的做法 参考文章 1.首先重新卸载当前的…

Go语言学习记录

GO语法学习之路 学习时间段2024-06-02学习记录安装&环境配置Go安装包内容统一入门姿势&#xff1a;hello world实现 Go语法初学Go 运行时&#xff08;runtime&#xff09;Go解释器 学习时间段 #mermaid-svg-tTuVZ3bbdJvu04kX {font-family:"trebuchet ms",verdan…

百度大模型算法实习岗上岸经验分享!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

算法学习(01)

1、排序算法 1&#xff09;快速排序 public void qsout(int[] arr,int l,int r){if(l > r)return;int i,j,temp,t;i l;j r;temp arr[l];while(i ! j){while(arr[j] > temp && i < j) j--;while(arr[i] < temp && i < j) i;if(i < j){t …

每日一练——分糖果

575. 分糖果 - 力扣&#xff08;LeetCode&#xff09; 方法一 可以做&#xff0c;但提示超时了 #define MIN(x, y) (x < y ? x : y)int distributeCandies(int* candyType, int candyTypeSize) {int p 0;char flag 1;for (int i 1; i < candyTypeSize; i){for (int…

TypeScript 模块解析机制

1. 模块解析的概念 模块解析是指编译器在编译过程中根据模块的导入语句找到并加载相应的模块文件的过程。在 TypeScript 中&#xff0c;模块可以使用相对路径或者绝对路径来导入&#xff0c;编译器需要根据导入语句中的路径信息来定位到对应的模块文件。 2. 解析策略 TypeSc…

Java项目:94 springboot大学城水电管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本管理系统有管理员和用户。 本大学城水电管理系统管理员功能有个人中心&#xff0c;用户管理&#xff0c;领用设备管理&#xff0c;消耗设备…

pandas习题 035:选择 DataFrame 其中一列

# 有以下一个 DataFrame&#xff0c;请分别选择 name 列和 math 列&#xff0c;选择后为一个 Series&#xff0c;并查看这些 Series 的数据类型。 import pandas as pddata {name: [Alice, Bob, Charlie, David, Eve],grade: [10, 11, 10, 12, 11],math: [90, 85, 92, 88, 95]…

介绍计算机系统中的I/O设备工作方式

在现代计算机系统中&#xff0c;I/O设备&#xff08;Input/Output Devices&#xff09;扮演着至关重要的角色&#xff0c;它们负责在计算机和外部环境之间进行数据交换。本文将详细介绍I/O设备的种类、连接方式及其工作原理&#xff0c;并解释GPU如何进行并行计算&#xff0c;以…

Lambda 表达式练习

目录 sorted() 四种排序 List 转 Map map 映射 对象中 String 类型属性为空的字段赋值为 null BiConsumer,> T reduce(T identity, BinaryOperator accumulator) allMatch(Predicate p) groupingBy(Function f) flatMap(Function f) Optional.ofNullable(T t) 和 …

基于51单片机的俄罗斯方块

一.硬件方案 本设计采用STC89C52RC单片机作为系统的芯片&#xff0c;实现人机交互、娱乐等功能。选用LCD12864实现俄罗斯方块游戏界面、图形显示&#xff1b;选用独立按键实现游戏控制。本设计实现的基本功能是&#xff1a;用按键控制目标方块的变换与移动&#xff1b;消除一行…

OpenCASCADE开发指南<十四>:OCCT建模类之BRepPrimAPI_MakePipe创建管道

1、OpenCasCade拓扑几何 在Open CASCADE Technology (OCCT) 中,除了基本三维几何体建模类BRepBuilderAPI外,还提供了复杂模型的建模类,常用的有如下几种,他们可以单独使用或相互组合,通过OCCT提供的融合函数进行组装。例如:BRepOffsetAPI_ThruSections、BRepOffsetAPI_Ma…

TalkingData数据统计:洞察数字世界的关键工具

TalkingData数据统计&#xff1a;洞察数字世界的关键工具 在数字化时代&#xff0c;数据已成为推动社会进步和商业决策的核心动力。TalkingData作为国内领先的移动数据服务平台&#xff0c;为众多企业提供了全面、精准的数据统计服务。本文将深入探讨TalkingData数据统计的应用…

Jenkins - Parallel 并行执行

Jenkins - Parallel 并行执行 引言Jenkins Parallel 基本用法Jenkins Prallel 启动多个其他 JobJenkins Parallel Retry 引言 日常执行测试用例&#xff0c;为了缩减执行时间&#xff0c;提高工作效率&#xff0c;可以从以下两个方面进行改进。 代码层面&#xff1a;用多进程…