C 语言编程 — 基本数据类型

目录

前文列表

程序编译流程与 GCC 编译器
C 语言编程 — 基本语法

数据类型

数据类型,即数据对象的类型,是编程语言的基石。自编程语言发明以来,数据类型就已经存在,其最初的目的就是为了能够让程序更加充分的利用稀缺的内存空间。

在硬件行业严格遵守摩尔定律发展了多年后的今天,开发者得以享受充足内存资源,同时,数据类型也被赋予了更深厚的含义:

  • 确定数据对象占用的内存空间大小
  • 确定数据对象的数值范围
  • 规定数据对象所能进行的操作(行为)

例如:基本整型数据对象占用 4 Bytes(32 Bits) 的内存空间, 数值范围是 0x0~0xFFFF FFFF,可以进行求余运算。需要注意的是,类型数据对象所占用的内存空间和数值范围,除了取决于 C 语言本身的常规定义之外,还可能会受到编译器的影响。

C 语言 4 大数据类型:

在这里插入图片描述

基本数据类型

数据类型用于声明不同类型的常量、变量或函数。变量的数据类型决定了变量占用的存储空间,以及如何解释存储的位模式。

基本类型是算术类型,包括:整数类型和浮点类型。

在这里插入图片描述

扫描二维码关注公众号,回复: 10525472 查看本文章

无符号数据类型与有符号数据类型的区别:

  • 占用相同的内存空间,但表示数值范围不同
  • 有符号和无符号仅可用于修饰整型或字符型数据对象

在这里插入图片描述

例如:若 unsigned char 和 signed char 都占用 1Byte 的内存空间。signed char 的数值范围为 [-128, 127],而 unsigned char 的数据范围为 [0, 255]。这是因为有符号数据类型数据的最高位被用作为符号位,而无符号的数据类型数据最高位被用作为数据位。

整型

  • 默认为 10 进制
  • 以 0 开头为 8 进制:045,021
  • 以 0b 开头为 2 进制:0b11101101
  • 以 0x 开头为 16 进制:0x21458adf

注意,各种类型的存储大小与操作系统 CPU 的位数是有关系的。可以使用 sizeof 运算符来得到某个类型或某个变量在特定平台上的准确大小。

#include <stdio.h>

int main() {
    printf("int: %lu \n", sizeof(int));
    return 0;
}
  • stdio.h:输入输出标准库,声明了 printf 标准函数
  • %lu:为 32 位无符号整数。
  • sizeof:C 语言运算符,计算数据类型或变量长度(即:所占字节数)

运行:

$ gcc -Wall main.c -o main

$ ./main
int: 4

浮点型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
在这里插入图片描述

  • 单精度常量:2.3f
  • (默认)双精度常量:2.3
#include <stdio.h>
#include <float.h>

int main(){
    printf("float byte: %lu \n", sizeof(float));
    printf("float MIN: %E \n", FLT_MIN);
    printf("float MAX: %E \n", FLT_MAX);
    printf("float DIG: %d \n", FLT_DIG);

    return 0;
}
  • float.h:定义了浮点数相关的宏,e.g. FLT_MIN、FLT_MAX 等。
  • %E:以指数形式输出单、双精度实数。

运行:

$ ./main
float byte: 4
float MIN: 1.175494E-38
float MAX: 3.402823E+38
float DIG: 6

字符串

在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

其实,并不需要把 null 字符显式的放在字符串常量的末尾。C 编译器会在初始化数组时,自动把 ‘\0’ 放在字符串的末尾。

char greeting[] = "Hello";

在这里插入图片描述

C 中内置的字符串操作函数:
在这里插入图片描述

#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str1[12] = "Hello";
   char str2[12] = "World";
   char str3[12];
   int  len ;
 
   /* 复制 str1 到 str3 */
   strcpy(str3, str1);
   printf("strcpy( str3, str1) :  %s\n", str3 );
 
   /* 连接 str1 和 str2 */
   strcat( str1, str2);
   printf("strcat( str1, str2):   %s\n", str1 );
 
   /* 连接后,str1 的总长度 */
   len = strlen(str1);
   printf("strlen(str1) :  %d\n", len );
 
   return 0;
}

运行:

strcpy( str3, str1) :  Hello
strcat( str1, str2):   HelloWorld
strlen(str1) :  10

void 类型

void 类型指定没有可用的值。它通常用于以下三种情况下:
在这里插入图片描述

发布了500 篇原创文章 · 获赞 1352 · 访问量 188万+

猜你喜欢

转载自blog.csdn.net/Jmilk/article/details/105263837