C语言初阶之数据类型

这篇具有很好参考价值的文章主要介绍了C语言初阶之数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言初阶之数据类型

 

C语言初阶之数据类型

1.基本类型

1.1 整形

       首先在C语言中整型分为int、short、long、long long、float、double、long double、char,最大的特点就是在不同平台或编译器下所分配的内存空间不同,分为32位/64位平台,作者在这主要以64位为例

(1)整形int(4字节)

取值范围: -2,147,483,648 到 2,147,483,647

无符号整形unsigned int(4字节)

取值范围:0 到 4,294,967,295

(2)短整形short(2字节)

取值范围:-32,768 到 32,767

无符号短整形unsigned short(2字节)

取值范围:0 到 65,535

(3)长整型long(4字节)

取值范围:-2,147,483,648 到 2,147,483,647

无符号长整形unsigned long(4字节)

取值范围:0 到 4,294,967,295

(4)更长的整形long long(8字节)

取值范围:-9223372036854775808到9223372036854775807

更长的无符号整形unsigned long long(8字节)

取值范围:0~18446744073709551615

长短整型和普通整形格式说明符均为%d

(5)单精度浮点数float(4字节)

取值范围:1.2E-38 到 3.4E+38

精度:6位有效位

格式说明符:%f

(6)双精度浮点数double(8字节)

取值范围:2.3E-308 到 1.7E+308

精度:15位有效位

(7)长双精度浮点数long double(16字节)

取值范围:3.4E-4932 到 1.1E+4932

精度:19位有效位

双精度浮点数和长双精度浮点数格式说明符均为%lf

浮点数在计算机内存中存储形式比较特殊,作者会单独写一篇文章讲讲

(8)字符型char(1字节)

       字符型本质也是一个整形,在计算机中存储时依旧二进制数据,在使用格式说明符%c时,输出的是正常字符,但在使用格式说明符%d时,输出的就是该字符的ASCII值,对照下面的ASCII表,比如,输入字符a,使用格式说明符%c时,输出的是a,但在使用格式说明符%d时,输出的就是97。

C语言初阶之数据类型

 ASCII图片来自菜鸟教程

下面是使用sizeof运算符在64位平台上输出的各类型大小

C语言初阶之数据类型

2.派生类型

2.1 数组

       数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组可以由多种类型定义,比如int类型、char类型、float类型等。其次数组还分为一维数组和多维数组,比较常见的是一维数组和二维数组。

int arr1[] = {1,2,3,4,5};

char arr2[3] = {'a','b','c'};

char arr3[3] = "abc";

int arr4[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

以上述代码为例,整形数组arr1,其中存放了5个元素,则占用了4*5=20个字节,而数组名arr1后的[ ]中应该存放的是元素个数,在这里应该填上5,也可以不填,这样就不会局限元素个数,比如我再添加一个元素6,就不用再去改元素个数的值;同理,如果我在这定义了元素个数为5,在不修改元素个数的值情况下,添加一个元素6,这个时候就会造成越界访问,程序就会报错;再看看字符型数组arr2和arr3,两者所占字节均为3个字节,只是表现形式有所不同,arr2是将a,b,c看成3个元素存放,而arr3则是将abc看作一个整体存放;二维整形数组arr4的表现形式如上图,左边的[ ]表示行,右边的[ ]表示列,同理,这里的行,也就是左边的[ ]可以不定义元素个数,但右边不可以,在现实中这个数组应表现为:

1 2 3
4 5 6
7 8 9

但在内存中它依然和一维数组一样,每个地址都是连续的,在这我就不多赘述了。

2.2 指针

       指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,你必须在使用指针存储其他变量地址之前,对其进行声明。例如:

int    *a;    /* 一个整型的指针 */
float  *c;    /* 一个单精度浮点型的指针 */
double *b;    /* 一个双精度浮点型的指针 */
char   *d;    /* 一个字符型的指针 */

不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。

       在使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。下面的实例涉及到了这些操作:

#include <stdio.h>
 
int main ()
{
   int  a = 20;   /* 实际变量的声明 */
   int  *b;        /* 指针变量的声明 */
 
   b = &a;  /* 在指针变量中存储 a 的地址 */
 
   printf("a 变量的地址: %p\n", &a  );
 
   /* 在指针变量中存储的地址 */
   printf("b 变量存储的地址: %p\n", b );
 
   /* 使用指针访问值 */
   printf("*b 变量的值: %d\n", *b );
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

a 变量的地址:004FFB58
b 变量存储的地址:004FFB58
*b 变量的值:20


       在指针类型中,还有一个特殊的指针,就是NULL指针;在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为指针。

NULL 指针是一个定义在标准库中的值为零的常量。请看下面的程序:

C语言初阶之数据类型

 如需检查一个空指针,你可以使用 if 语句,如下所示:

if(p)     /* 如果 p 非空,则逻辑值为ture */
if(!p)    /* 如果 p 为空,则逻辑值为ture */

2.3 结构体

       结构体是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构体中的数据成员可以是基本数据类型(如 int、float、char 等),也可以是其他结构体类型、指针类型等。

       结构体定义由关键字 struct 和结构体名组成,结构体名可以根据需要自行定义。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct student
{
    int num;
    int age;
    char name[10]
}stu;

student是结构体标签。

num,age,name是标准的变量定义。

stu结构变量,定义在结构的末尾,最后一个分号之前,你可以指定一个或多个结构变量。

我们在编写C语言程序时可以使用结构体指针结合"->"来访问成员变量。
例如 stu *S1 = &stu1;
        stu1->num = 123;

结构体还可作为函数参数、嵌套结构体、指向结构的指针等操作,在此作者不多做赘述。

2.4 共用体

       共用体(Union)在C语言中,是一种和结构体非常类似的语法,允许你在相同的内存位置存储不同的数据类型。你可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。

       定义共用体与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:

union student
{
    int num;
    int age;
    char name[10];
}stu;

       student类型的变量可以存储两个整数和一个字符串。这意味着一个变量(相同的内存位置)可以存储多个多种类型的数据。你可以根据需要在一个共用体内使用任何内置的或者用户自定义的数据类型。

       共用体占用的内存应足够存储共用体中最大的成员。例如,在上面的实例中,student将占用 12个字节的内存空间,因为在各个成员中,字符串所占用的空间是最大的。下面的实例将显示上面的共用体占用的总内存大小:

C语言初阶之数据类型

 共用体可以用于同类型结构体之间直接赋值、结构体嵌套、匿名结构体等操作,在此也不多做赘述。

3.枚举类型

      枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:

#defineMON 1
#defineTUE 2
#defineWED 3
#defineTHU 4
#defineFRI 5
#defineSAT 6
#defineSUN 7

这个看起来代码量就比较多,接下来我们看看使用枚举的方式:

enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};

枚举的定义主要有下面3种

1、先定义枚举类型,再定义枚举变量

enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

2、定义枚举类型的同时定义枚举变量

enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

3、省略枚举名称,直接定义枚举变量

enum
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

这篇文章主要目的是为了介绍数据类型,而且枚举在平时写代码中很少用到(对于初学者来说),所以在此作者就大概提一提。

4.空类型(void)

void 类型指定没有可用的值。它通常用于以下三种情况下:

(1)函数返回为空
C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);

(2)函数参数为空
C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);

(3)指针指向 void
类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。

在C语言学习中,void类型也是比较常见的数据类型,随着不断的学习应用,相信你很快就能掌握的!!!

       由于篇幅太长,主要给新手入门介绍为主,有些知识点没有写得太详细,如有什么疑问,可以在评论区提出!以上内容有些参考菜鸟教程,还有作者平时所学整合而成,如有不正之处,敬请指出,制作不易,希望大家能给个一键三连,谢谢各位了🥺🥺🥺! 文章来源地址https://www.toymoban.com/news/detail-428671.html

到了这里,关于C语言初阶之数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言初阶之三子棋

    首先我们建立game.h,game.c,test.c三个文件,如下图 在game.h文件中我们引用需要使用到的头文件和定义标识符以及函数定义,其余两个文件包含game.h文件即可,即#include\\\"game.h\\\"。 game.h代码如下: 其中ROW和COL两个标识符定义的是棋盘的行和列大小,方便我们在写函数和使用是重复使

    2024年02月03日
    浏览(36)
  • C语言初阶之常量和变量

    在C程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中, 直接常量是可以不经说明而直接引用的,而符

    2024年02月03日
    浏览(33)
  • C语言初阶之扫雷代码详解(含递归展开)

    主要分为下面几个过程: 1、建立棋盘 2、初始化棋盘 3、设置棋盘雷数 4、打印棋盘 5、玩家找雷 6、判定胜负 文件名:game.h 代码如下: 在game头文件中,首先包含会使用到的库头文件,这里的ROW以及COL是雷区的行和列大小,也就是说这是玩家实际能看到的行数及列数,而RO

    2024年02月03日
    浏览(37)
  • 数据结构初阶之排序

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶    Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 一.前言 二.选择排序 2.1选择排序思想 2.2代码实现 三.快速

    2024年01月18日
    浏览(44)
  • 数据结构初阶之插入排序与希尔排序详解

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶    Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 一.前言 二.插入排序 2.1插入排序的思想 2.2代码实现 三.希

    2024年02月02日
    浏览(48)
  • 数据结构初阶之二叉树的详细解析

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶    Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 1.前言  2.二叉树各个功能代码实现 2.1二叉树结构体 2.2二叉

    2024年02月05日
    浏览(42)
  • 数据结构初阶之二叉树性质练习与代码练习

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶    Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 1.前言 2.性质练习 3.代码练习  3.1单值二叉树 3.2检查两颗树

    2024年02月04日
    浏览(47)
  • C++初阶之内存分布

    我们先来看下面的一段代码 : 实际输出和对应的内存分布 我在Linux进程一文当中对内存分布和虚拟内存有详细讲解,不了解的小伙伴可以去看看这篇文章: Linux进程 说明: 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。 内存映射段是高效的I/O映射方

    2024年02月16日
    浏览(36)
  • C++初阶之模板深化讲解

    非类型模板 (Non-Type Template)是 C++ 中的一种模板形式,它允许你在模板中传递除了类型以外的其他值,比如整数、枚举、指针等。这些参数可以在编译时被解析,用于生成模板的实例化版本。 非类型模板参数 (Non-Type Template Parameter)是在模板声明中,作为参数的一部分,而

    2024年02月13日
    浏览(34)
  • C++初阶之C++入门最全详解

    C++总计63个,C语言32个 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace的出现

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包