当前位置: 首页 > news >正文

每日一个C语言知识:C 数据类型

C语言数据类型详解

C语言的数据类型可以分为两大类:基本类型派生类型

C语言数据类型
基本类型
派生类型
整型
浮点型
字符型
void类型
short
int
long
long long
float
double
long double
数组
指针
结构体
共用体
枚举

1. 基本数据类型

整型数据类型
类型大小(字节)范围格式说明符
char1-128 到 127%c, %d
unsigned char10 到 255%c, %u
short2-32,768 到 32,767%hd
unsigned short20 到 65,535%hu
int4-2,147,483,648 到 2,147,483,647%d
unsigned int40 到 4,294,967,295%u
long4 或 8取决于系统%ld
unsigned long4 或 8取决于系统%lu
long long8-9.2×10¹⁸ 到 9.2×10¹⁸%lld
unsigned long long80 到 1.8×10¹⁹%llu

示例

#include <stdio.h>
#include <limits.h>int main() {char c = 'A';short s = 1000;int i = 100000;long l = 1000000L;long long ll = 10000000000LL;unsigned int ui = 4000000000U;printf("char: %c (%d)\n", c, c);printf("short: %hd\n", s);printf("int: %d\n", i);printf("long: %ld\n", l);printf("long long: %lld\n", ll);printf("unsigned int: %u\n", ui);// 查看类型范围printf("\n类型范围:\n");printf("int 范围: %d 到 %d\n", INT_MIN, INT_MAX);printf("char 范围: %d 到 %d\n", CHAR_MIN, CHAR_MAX);return 0;
}
浮点型数据类型
类型大小(字节)精度范围格式说明符
float4约6-7位小数±3.4e±38%f, %e
double8约15-16位小数±1.7e±308%lf, %le
long double10 或 16更高精度更大范围%Lf, %Le

示例

#include <stdio.h>
#include <float.h>int main() {float f = 3.14159f;           // 注意后面的fdouble d = 3.141592653589793;long double ld = 3.141592653589793238L; // 注意后面的Lprintf("float: %.7f\n", f);printf("double: %.15lf\n", d);printf("long double: %.15Lf\n", ld);// 科学计数法表示printf("科学计数法: %e\n", d);// 查看精度信息printf("\n精度信息:\n");printf("float 精度: %d 位小数\n", FLT_DIG);printf("double 精度: %d 位小数\n", DBL_DIG);return 0;
}
字符型

字符在C语言中实际上是整数(ASCII码值)。

示例

#include <stdio.h>int main() {char letter = 'A';char digit = '7';char symbol = '$';printf("字符: %c, ASCII值: %d\n", letter, letter);printf("字符: %c, ASCII值: %d\n", digit, digit);printf("字符: %c, ASCII值: %d\n", symbol, symbol);// 字符运算char next_letter = letter + 1;printf("下一个字母: %c\n", next_letter);// 大小写转换char lower = letter + 32;  // 'A'=65, 'a'=97printf("小写: %c\n", lower);return 0;
}
void 类型
  • 表示"无类型"
  • 主要用于:
    • 函数不返回值
    • 函数无参数
    • 通用指针
#include <stdio.h>// 函数不返回值
void printHello() {printf("Hello, World!\n");// 不需要return语句,或使用 return;
}// 函数无参数
int getNumber(void) {return 42;
}int main() {printHello();int num = getNumber();printf("Number: %d\n", num);// void指针(通用指针)int x = 10;void *ptr = &x;printf("void指针地址: %p\n", ptr);return 0;
}

2. 派生数据类型

数组
#include <stdio.h>int main() {// 整型数组int numbers[5] = {1, 2, 3, 4, 5};// 字符数组(字符串)char name[] = "John";  // 自动计算大小,包括'\0'char city[10] = "Beijing";// 二维数组int matrix[2][3] = {{1, 2, 3},{4, 5, 6}};printf("数组元素:\n");for(int i = 0; i < 5; i++) {printf("numbers[%d] = %d\n", i, numbers[i]);}printf("字符串: %s\n", name);printf("二维数组: %d\n", matrix[1][2]); // 输出6return 0;
}
指针
#include <stdio.h>int main() {int x = 10;int *ptr = &x;  // ptr指向x的地址printf("变量x的值: %d\n", x);printf("变量x的地址: %p\n", &x);printf("指针ptr的值: %p\n", ptr);printf("通过指针访问的值: %d\n", *ptr);// 通过指针修改变量值*ptr = 20;printf("修改后x的值: %d\n", x);return 0;
}
结构体
#include <stdio.h>
#include <string.h>// 定义结构体
struct Student {char name[50];int age;float score;
};int main() {// 声明结构体变量struct Student stu1;// 初始化结构体成员strcpy(stu1.name, "Alice");stu1.age = 20;stu1.score = 95.5;// 声明并初始化struct Student stu2 = {"Bob", 22, 88.5};printf("学生1:\n");printf("姓名: %s\n", stu1.name);printf("年龄: %d\n", stu1.age);printf("分数: %.1f\n", stu1.score);printf("\n学生2:\n");printf("姓名: %s\n", stu2.name);printf("年龄: %d\n", stu2.age);printf("分数: %.1f\n", stu2.score);return 0;
}
枚举
#include <stdio.h>// 定义枚举
enum Weekday {MONDAY,    // 0TUESDAY,   // 1WEDNESDAY, // 2THURSDAY,  // 3FRIDAY,    // 4SATURDAY,  // 5SUNDAY     // 6
};// 可以指定枚举值
enum Color {RED = 1,GREEN = 2,BLUE = 4
};int main() {enum Weekday today = WEDNESDAY;enum Color favorite = BLUE;printf("Today is day number: %d\n", today);printf("My favorite color code: %d\n", favorite);// 枚举常用于switch语句switch(today) {case MONDAY:printf("今天是星期一\n");break;case WEDNESDAY:printf("今天是星期三\n");break;case FRIDAY:printf("今天是星期五\n");break;default:printf("今天是其他日子\n");}return 0;
}

3. 类型转换

隐式类型转换(自动转换)
#include <stdio.h>int main() {int i = 10;float f = 3.14;double d;// 自动转换:int → floatf = i;  printf("f = %.2f\n", f);// 自动转换:float → doubled = f;printf("d = %.2lf\n", d);// 表达式中的自动转换double result = i + f;  // i自动转换为float,然后转换为doubleprintf("result = %.2lf\n", result);return 0;
}
显式类型转换(强制转换)
#include <stdio.h>int main() {int a = 5, b = 2;float result;// 整数除法result = a / b;  // 结果是2.0,不是2.5printf("整数除法: %.1f\n", result);// 强制类型转换result = (float)a / b;  // 结果是2.5printf("浮点数除法: %.1f\n", result);// 更多强制转换示例double pi = 3.14159;int integer_pi = (int)pi;  // 截断小数部分printf("pi的整数部分: %d\n", integer_pi);char c = 'A';int ascii = (int)c;  // 字符转ASCII值printf("'%c'的ASCII值: %d\n", c, ascii);return 0;
}

4. 类型定义(typedef)

使用 typedef 创建类型别名。

#include <stdio.h>// 为现有类型创建别名
typedef int Integer;
typedef float Real;// 为结构体创建别名
typedef struct {char name[50];int age;
} Person;// 为数组创建别名
typedef int Vector[3];int main() {Integer num = 100;  // 实际上就是intReal price = 99.99; // 实际上就是floatPerson p1 = {"Tom", 25};Vector v = {1, 2, 3};  // 相当于int v[3]printf("数字: %d\n", num);printf("价格: %.2f\n", price);printf("姓名: %s, 年龄: %d\n", p1.name, p1.age);printf("向量: %d, %d, %d\n", v[0], v[1], v[2]);return 0;
}

http://www.dtcms.com/a/450036.html

相关文章:

  • 实验二十 GaussDB逻辑备份恢复实验
  • 中英文网站制作wordpress表
  • 开源 网站开发框架seo是一种利用搜索引擎
  • 怎样建设网站空间网站开发中英文版如何写
  • 网站设计怎么收费注册安全工程师条件
  • 5. 逆矩阵
  • 济源专业网站建设(制作网站)网络技术学习网站
  • Redis过期策略与内存淘汰机制解析
  • Transformer(四)---解码器部分实现、输出部分实现及模型搭建
  • 网站开发毕业设计任务书注册推广赚钱一个30元
  • 邯郸网络广播电视台北京网站seo技术厂家
  • leetcode 695 岛屿的最大面积
  • LLaVA-NeXT-Interleave论文阅读
  • 邢台企业网站制作公司中建国际建设有限公司网站
  • 长春火车站防疫要求做网站都要用到框架吗
  • 集合进阶 - HashMap 篇
  • 从原图到线图再到反推:网络图几何与拓扑的结合分析
  • Lua下载和安装教程(附安装包)
  • JAVA实验课程第五次作业分析与代码示例
  • 龙口网站制作公司深圳知名设计公司有哪些
  • 网站数据修改网页界面设计的起源
  • 东莞建设网站官网住房和城乡wordpress 如何修改like和dislike
  • Gopher二次编码原因解析
  • 【ARM汇编语言基础】-数据处理指令(七)
  • 汇编与反汇编
  • 福州建设网站shopee怎么注册开店
  • 建立网站站点的目的贵州二级站seo整站优化排名
  • 阳江做网站多少钱企业网站推广方法有哪些
  • sm2025 模拟赛11 (2025.10.5)
  • python镜像源配置