首页 > 其他分享 >「C系列」C 数据类型

「C系列」C 数据类型

时间:2024-06-06 11:28:56浏览次数:17  
标签:系列 int void 数据类型 long printf 类型

文章目录

一、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 double

    printf("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 基本语法

标签:系列,int,void,数据类型,long,printf,类型
From: https://blog.csdn.net/xuaner8786/article/details/139391903

相关文章

  • stm32系列--DAC的应用
     #include"bsp_dac.h"#include"math.h"//#include"stm32f10x_tim.h"//#include"stm32f10x_dma.h"//#include"stm32f10x_dac.h"//正弦波单个周期的点数#definePOINT_NUM32#defineangle3.1415/64/*初始波形数据-----......
  • stm32系列--ADC使用
      #include"adc.h"#include"delay.h"////////////////////////////////////////////////////////////////////////////////////本程序只供学习使用,未经作者许可,不得用于其它任何用途//ALIENTEK战舰STM32开发板//ADC代码//正点原子@ALIENTEK//技术论......
  • MyBatis的JdbcType与MySQL数据类型之间的对应关系
    MyBatis的JdbcType与MySQL数据类型之间存在一定的对应关系,这些映射帮助MyBatis在处理SQL查询时正确地将数据库中的数据类型转换为Java对象。以下是一些常用的MyBatisJdbcType与MySQL数据类型的对应关系:BIGINT-对应MySQL的BIGINT类型,用于存储大整数值。INTEGER -对应MySQL的......
  • C#提取文件中的图标 - 开源研究系列文章
          这次想开发一个目录图标更改器,里面涉及到图标文件的获取的问题。于是,就写了此博文来解决获取图标文件的方法,然后才用到那个小应用上。这个例子参考了网上的例子,主要是将图标从文件中获取出来,然后才能复制到目录进行应用。 1、项目目录;  2、源......
  • 【Python数据预处理系列】精通Pandas:数据清洗中的字符串分割技巧(例子:如何将籍贯列中的
    本文将深入探讨Pandas库在数据清洗中的应用,特别是字符串分割技巧。在数据分析的预处理步骤中,有效地处理和准备原始数据是至关重要的一步。我们将通过具体示例,展示如何使用Pandas中的.str.split()函数来对数据集中的字符串进行分割,进而提取所需信息。本文例子讲解如何将......
  • Redis-2-基本数据类型
    1.Redis基础命令命令描述示例KEYS查看符合模板的所有keyKEYSpatternDEL删除一个指定的keyDELkeyEXISTS判断key是否存在EXISTSkeyEXPIRE给一个key设置有效期,有效期到期时该key会被自动删除EXPIREkeysecondsTTL查看一个KEY的剩余有效期TTLke......
  • AI菜鸟向前飞 — LangChain系列之十六 - Agent系列:从现象看机制(下篇)一款“无需传递中
    前言    AI菜鸟向前飞—LangChain系列之十四-Agent系列:从现象看机制(上篇)    AI菜鸟向前飞—LangChain系列之十五-Agent系列:从现象看机制(中篇)一个Agent的“旅行”    回顾前两篇文章,大家会发现一个问题    为什么每次Agent在invoke的时候需要多加......
  • stm32系列--同一定时器双通道捕获
     voidTIM3_Cap_Init(u16arr,u16psc)//定时器3通道2输入捕获配置{TIM_ICInitTypeDefTIM_ICInitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;NVIC_InitTypeDefNVIC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;R......
  • Redis 常用的数据结构简介与实例测试【Redis 系列二】
    〇、都有哪些数据结构?Redis提供了较为丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。随着Redis版本的更新,后面又支持了四种数据类型:BitMap(2.2版新增)、HyperLogLog(2.8版新增)、GEO(3.2版新增)、Stream(5.0版新增)。本文将对以上数据类型,通......
  • stm32系列--低电平时间的测量
     TIM_ICInitTypeDefTIM2_ICInitStructure;voidTIM2_CH1_Cap_Init(u16arr,u16psc){GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB1Peri......