C语言的数据类型的本质和提高学习

一、数据类型的概念

  1. 类型是对数据的抽象
  2. 类型是相同的数据有相同的表示形式、存储格式以及相关的操作
  3. 程序中使用的数据必定属于某一种数据类型

?

1、算术类型:

包括三种类型:整数类型、浮点类型,枚举型。

其中:

枚举类型:被用来定义在程序中只能赋予其一定的离散整数值的变量。

字符型char:也是整数型,所有的字符都用ASCII码表来表示。

2、void 类型:

类型说明符 void 表明没有可用的值。

3、构造类型:

包括:指针类型、数组类型、结构类型、共用体类型和函数类型(函数是一个特殊的数据类型)

数组类型和结构类型统称为聚合类型。需要注意的是:函数的类型指的是函数返回值的类型。

二、数据类型的本质

  1. 数据类型可以理解为创建变量的模具:是固定内存大小的别名
  2. 数据类型的作用:编译器预算对象份额皮的内存空间大小
  3. 数据类型的大小:sizeof(char);

下面看一下基本数据的占用空间的大小。

#include "stdio.h"

int main(int argc, const char **argv)
{
    printf("sizeof(char) = %d\r\n", sizeof(char));
    printf("sizeof(int) = %d\r\n", sizeof(int));
    printf("sizeof(short) = %d\r\n", sizeof(short));
    printf("sizeof(void) = %d\r\n", sizeof(void));
    printf("sizeof(float) = %d\r\n", sizeof(float));
    printf("sizeof(double) = %d\r\n", sizeof(double));
    printf("sizeof(long) = %d\r\n", sizeof(long));
    printf("sizeof(char *) = %d\r\n", sizeof(char *));
    printf("sizeof(int *) = %d\r\n", sizeof(int *));
    printf("sizeof(void *) = %d\r\n", sizeof(void *));

    return 0;
}

在win下(win10-64位)下运行结果为:

?

在linux下(x86_64)运行结果为:

?

其中,编译的时候后面的选项-w,为不显示编译的警告

           相反,-W或者-Wall会显示所有的警告

三、那么数组类型

简单的测试代码如下:

 1 #include "stdio.h"
 2
 3 int main(int argc, const char **argv)
 4 {
 5     char b[10];
 6
 7     printf("b = %d, b + 1 = %d, &b = %d, &b + 1 = %d\r\n", b, b + 1, &b, &b + 1);
 8
 9     printf("sizeof:b = %d, b + 1 = %d, &b = %d, &b + 1 = %d\r\n", sizeof(b), sizeof(b + 1), sizeof(&b), sizeof(&b + 1));
10
11     return 0;
12 }

?

由运行结果可以看出

b&b是一样的,是因为b是数组首元素的地址,也数组的首地址,&b意思就是对整个数组取地址,当然和b是一样的了,此时,b也是一个地址常量;

b+1:在数组首元素基础上偏移一个地址,对于程序上面的char类型数据,偏移量为1,b+1即b[1],所以结果是在b的基础上加1;

&b+1:表示在整个数组的基础上偏移1,也即是跳过整个数组,所以,&b+1的值为b+10。

综上所述:也就是本质不同,b和&b代表的数据类型不一致

        b  代表的是数组收元素的地址

        &b 代表的是整个数据的地址

四、数据类型起别名

        1、typedef unsigned int uint16_t;

        2、#define uint8_t unsigned char

关于typedef和define的具体用法,可以查看:typedef和define的简单说明

五、数据类型的封装

        1、void字面意思是无类型,void *则为无类型指针,void *可以指向任何类型的数据

        2、比如int func(void *handle),可以参考memcpy和memset的函数

        函数原型为:

                void *memcpy(void *dest, void *src, size_t count);

                void *memset(void *buffer, int c, size_t num)

        3、void可以修饰函数的返回值和参数,表示无返回值或者参数

                如果函数没有返回值,则应该声明为void型

                如果没有参数,应该声明参数为void

                比如:int func(void){return 0;}

        4、void指针的意义

                C语言中规定只有相同类型的指针才可以相互赋值

                void*指针作为左值用于接收任意类型的指针

                void*作为右值赋值给其他指针是需要进行数据类型的强制转换

                int p1 = NULL;

                char *p2 = (char *)malloc(sizeof(char) * 20);

        5、C语言中不存在void类型的变量,在C中,没有规定void是多大内存的别名

原文地址:https://www.cnblogs.com/songshuaiStudy/p/10549465.html

时间: 2024-11-09 19:13:10

C语言的数据类型的本质和提高学习的相关文章

从头开始-03.C语言中数据类型

基本数据类型 整形: Int 4字节 %d / %i Short 2字节 %hd Long 8字节 %ld Longlong 8字节 %lld Unsigned 4字节 % 浮点型 单精度 Float 4字节 %f 双精度 Double 8字节 %lf 字符  char   1字节   %c 枚举:当一个变量只用几个固定的取值的时候使用枚举 特点:先定义枚举类型,然后使用枚举类型定义枚举变量 作用:提高代码的可读性,方便程序员之间的交流 注意:枚举类型的实质是整形 枚举定义的每一个成员都代表一个

C语言:数据类型、运算符、表达式

.:.:第二章:数据类型.运算符.表达式:.:. 第二章: 数据类型.运算符.表达式 C语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以包括三个方面:·数据类型·存储类型·作用域 在本课中,我们只介绍数据类型说明.其它说明在以后各章中陆续介绍.所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的.在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类. 1.基本数据类型 基本数据类型

C语言基本数据类型简介

C语言基本数据类型简介 1.概述 C 语言包含的数据类型如下图所示: 2.各种数据类型介绍 2.1整型 整形包括短整型.整形和长整形. 2.1.1短整形 short a=1; 2.1.2整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前.高位在后,例如0x12345678在内存中的存储如下: 地址:0x0012ff78 0x0012ff79 0x0012ff7a 0x0012ff7b 数据:

黑马程序员 C语言:数据类型

C语言的数据类型 C语言程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以包括三个方面: ·数据类型·存储类型·作用域 所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的.在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类. 1.基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它类型.也就是说,基本数据类型是自我说明的. 2.构造数据类型构造数据类型 是根据已定义的一个或多个数据类型用构造的方法来定义的.

谈谈C语言的数据类型

本文摘要: 本文主要讲述C语言中的数据类型,从基本的数据类型到派生的数据类型,从int ,char ,float double ....到指针,数组,函数,指向指针的指针,指向数组的指针,指向函数的指针,指针与数组的区别,指针作为函数参数,函数作为函数参数.作为例子,本文将通过通用链表结构来说明void*如何实现通用结构设计,通过相对通用的哈希结构来说明如何利用函数指针作为函数的参数以及如何在结构体中封装函数指针以实现相当于类的功能结构. 首先,通过一些常见的声明来开始本文,这些声明几乎包含本文

C语言基本数据类型

所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的.在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类. 数据类型说明: 基本数据类型: 基本数据类型最主要的特点是,其值不可以再分解为其它类型.也就是说,基本数据类型是自我说明的. 构造数据类型: 构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的.也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”.每个“成员”都是一个基本数据类型或又是一个构造类型.在C语言中,构

C语言基本数据类型大小

C语言基本数据类型占用的字节数可以通过如下例子获取: #include<stdio.h> int main(void) { printf("char size=%d \n",sizeof(char)); printf("int size=%d \n",sizeof(int)); printf("long size=%d \n",sizeof(long)); printf("float size=%d \n",siz

c语言中函数调用的本质从汇编角度分析

今天下午写篇博客吧,分析分析c语言中函数调用的本质,首先我们知道c语言中函数的本质就是一段代码,但是给这段代码起了一个名字,这个名字就是他的的这段代码的开始地址 这也是函数名的本质,其实也就是汇编中的标号.下面我们会接触到一些东西 比如 eip 就是我们常常说的程序计数器,还有ebp和esp (这里是俩个指针,记得我们以前学8086也就一个sp堆栈指针)分别为EBP是指向栈底的指针,在过程调用中不变,又称为帧指针.ESP指向栈顶,程序执行时移动,ESP减小分配空间,ESP增大释放空间,ESP又称

3、C语言之数据类型、运算符与表达式

C语言之数据类型.运算符与表达式 1.C的数据类型 数据类型决定: (1)数据占内存的字节数 (2)数据取值范围 (3)可以进行的操作 2.常量与变量 常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量 常量区分为不同类型: 整型 100 ,125,-1000 实型:3.14, 0.23 字符型: 'a', 'b' 字符串型:"a", "adfdg", "1233" 用某种符号来代表某个常量,称这个符号为符号常量 #define PRI