C语言变量类型

C语言的指针

C语言是汇编之上最靠近硬件操作的语言,其中最重要的一点便是指针,指针是C语言操作内存的利器,学好指针对理解其它语言的机制也有帮助,比如Java语言的this vs super C++中的应用、move。

变量与内存的相关操作

数组变量与非数组变量

分配、读写、释放,在C语言中分配一段内存的方法一般有2种,1.变量的声明(局部变量、全局变量)2.使用malloc分配,无论哪种方法,内存分配的过程都是一样的,区别是释放内存的不同需求
在C语言中,声明一个变量具有两个基本要素:
1.变量类型–约定了这段内存的类型和大小
2.变量名称–这块内存的别名,用于识别这块内存,给写代码的人看的,汇编完成变量名就不存在了

  • 变量类型进一步可以分为:
    1.非数组变量类型
    包括 int short long float double char 结构体/联合体,指针变量类型等
    2.数组变量类型
    数组变量类型是一种构造类型,是由多个同样的变量类型(包括数组变量类型和非数组变量类型)组成或者说构造成的一种一维构造类型包含两个要素:元素个数元素的变量类型数组变量类型的元素可以是非数组变量类型,任何数组变量类型分配的内存也可以通过sizeof这个操作符来获取
    例如:int a[2] 变量类型是int[2] 变量名是a 其大小为sizeof(int[2]),或者sizeof(a),对于int[2]其大小就是int*2的大小
    float[2][3] 数组变量类型,包含两个元素,每个元素的类型是float[3]
    double[3][4][5]数组变量类型,包含3个元素,每个元素的类型是double[4][5]
    仍然可以通过sizeof这个操作符获取其大小,sizeof(float[2][3]),sizeof(double[3][4][5])
    float[2][3]的大小为 float*2*3,double[3][4][5]的大小为 double*3*4*5
    C语言中所有的数组在存储上都是一维的
    数组类型的声明方式:
    变量类型为float[2][3],变量名b 则 float b[2][3]
    变量类型为double[3][4][5],变量名c 则 double c[3][4][5]
    要能正确的识别出数组变量声明中的变量类型变量名,这是指针理解的基础

  • 任何变量类型分配的内存大小可以通过sizeof这个操作符来获取,sizeof(类型名),例如:sizeof(int),此指令在汇编阶段起作用,即汇编完成这个值就计算出来了

指针变量类型

指针变量类型是一个非数组变量类型

  • 任何一种变量类型(数组与非数组),都有指向其的一个指针变量类型,反之亦然
    例如:指向int变量类型的指针变量类型是int*, 指向int[2]变量类型的指针变量类型是int(*)[2]

  • 指针变量类型是一个非数组变量类型 因此指针变量类型也有相应的指向其的另一个指针变量类型
    例如:指向 int* 变量类型的指针变量类型是int**,指向int(*)[2]变量类型的指针变量类型是int(**)[2]

  • 指针变量类型既然是普通的非数组变量类型,因此可以用来构造数组变量类型,作为数组的元素
    例如:int*[2]包含两个元素,每个元素的数据类型是int*,把int*当作一个整体,比如看作PINT,则int*[2]可以写成PINT[2],即PINT[2]包括两个元素,每个元素的类型是PINT

  • 指针变量类型构成的数组变量类型也有其对应的指针变量
    例如:int*[2],float*[2][3],double*[2][3][4] 对应的指针变量类型 int*(*)[2],float*(*)[2][3],double*(*)[2][3][4]
    把int*,float*,double*当做整体来看,更好理解,比如把int*当整体看作PINT,则int*[2] 为PINT[2]对应的指针变量类型PINT(*)2

  • 指针变量类型的大小与计算机的位数有关,即地址总线的宽度,寻址位宽,32位机是4个字节,64位机是8个字节

变量类型总结

假设变量类型为Var_T 变量名 N
变量的声明可以抽象为:Var_T N; 变量类型对应的指针类型为Var_T*,具体的申明方式还要根据具体的语法规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值