C语言变量类型的本质

原创 2012年03月24日 09:44:46

C语言是强类型语言,定义变量时必须声明变量的类型,赋值的时候也只能是同种类型变量赋值。


一。变量的类型告诉编译器怎么处理这个变量的数据。

         虽然C语言是强类型语言,但是不同类型的变量通过类型转换也可以赋值,甚至指针变量可以转化为int类型,转化为char类型。从本质上来说,变量类型只是告诉编译器应该怎么处理这个变量,所以不同变量可以通过显示类型转换来赋值。理解这点对我们理解指针的转型非常重要。例如

  1. int a = 10;  
  2. int **ptr = &a;  
  3. int b = (int)(*ptr); // *ptr是一个指针,但是通过转型为int,我们可以将其赋值给b。  
如果不明白变量类型的本质,那么会以为第三行代码是错误的。为什么可以这样赋值呢?(*ptr)是一个指针,可是指针也有值,它的值是一个地址,地址其实就是无符号整数。所以我们通过类型转换变成int,这个变量在内存中的数据没有变化,只是对它的解析变化了。如果是作为指针类型,那么数据是作为指针来解析;如果作为int型,那么数据是作为int来解析。事实上,我们还可以将其赋值给char类型。将其转型为char,那么对它的解析就是char类型了,只取数据的一个字节解析成char类型,赋值给ch。

  1. char ch = (char)(*ptr); // 有些编译器会报错,将其改成(char)(int)(*ptr)就可以修正错误了。  

二。变量的类型告诉编译器要分配多少内存空间。

        在定义一个变量时,变量类型告诉编译器要分配多少内存空间来存储变量。

  1. char ch; // 1B  
  2. int    i;   //  4B  
  3. long l;   //  4B  
  4. float f;  //  4B  
  5. double;  // 8B  

顺便说说,如何理解多级指针。例如int **ptr; 

当我们遇到二级指针,三级指针时,总是弄不明白各级指针是什么意思。有一种方法比较容易多级指针,将指针作为数组来理解。一级指针是一维数组,二级指针是二维数组,三级指针是三维数组,依此类推。当然有些时候不能这么理解,那就要具体问题具体分析了。

  1. int *ptr1;     // 一维数组  
  2. int **ptr2;  // 二维数组  
  3. int ***ptr3; // 三维数组  


C语言(变量的定义和类型的本质)

学习编程开发的一个非常重要的概念是:一定要理解任何变量、函数原则上都是一块块大小各异的内存,而类型则是我们和系统对这块内存含义的约定。   拓展: 很多初学者对变量的定义理解模糊,比...
  • vincent040
  • vincent040
  • 2016年02月24日 12:03
  • 1471

C语言之变量本质总结

 变量 变量的概念及本质: 变量命名规则: 标示符: 1、程序中用于标识常量、变量、函数的字符序列。 2、只能由字母、数字、下划线组成 3、第一个字母必须...
  • wu5215080
  • wu5215080
  • 2014年08月27日 22:25
  • 2995

C语言变量类型的本质

C语言是强类型语言,定义变量时必须声明变量的类型,赋值的时候也只能是同种类型变量赋值。 一。变量的类型告诉编译器怎么处理这个变量的数据。          虽然C语言是强类型语言,但是不同...
  • Imcainiao11
  • Imcainiao11
  • 2012年03月22日 01:31
  • 1905

C语言二维数组的本质

#define _CRT_SECURE_NO_WARNINGS #include #include #include void main(){ int a[3][5], i=0,j=0;...
  • LHN_hpu
  • LHN_hpu
  • 2016年06月24日 16:24
  • 600

C语言本质

基本概念 我们可以这样去声明一个数组     T A[N];     T 是某种类型,比如int, float, double, A是数组名, N是整型常数 这句声明会产生两个动作, 第1,它分配...
  • robinsongsog
  • robinsongsog
  • 2015年06月04日 10:53
  • 765

C语言变量类型

C语言变量类型 auto static external static external register auto 局部变量      auto 变量是用堆栈(stack)方式占用储存器空间,...
  • colin719
  • colin719
  • 2007年01月13日 16:07
  • 7607

C语言基础:C语言变量类型 - 全局变量和局部变量

前言 何为变量? 在我们之前学到的知识里面, 定义过很多变量, 比如int 变量, double变量, long变量, 这些都是属于变量, 这次我们所说的知识是在这些变量的基础上再添加一些知识, 那...
  • qq350116542
  • qq350116542
  • 2015年01月08日 13:33
  • 794

C语言的本质(10)——指针本质

指针,大概是C语言中最难理解的概念之一了。指针这个东西是C语言中的一个基本概念,C99中对于指针的定义是:1. 指针的类型是derived from其它类型,也就是说指针的类型是由它指向的类型决定的;...
  • yincheng01
  • yincheng01
  • 2014年06月30日 13:08
  • 2953

C语言变量类型和存储分配

程序内存从地地址到高地址一般分为代码段、数据段和堆栈段。代码段用来存放执行代码的一块内存区域,该区域的大小在程序运行前就已经确定,并且内存区域属于只读,其中可能包含一些只读的常数变量如字符串变量等。数...
  • ljtyzp
  • ljtyzp
  • 2012年03月19日 22:41
  • 2191

python使用 C语言类型、ctypes 的用法

【转】http://www.cnblogs.com/rainduck/archive/2011/09/02/2163230.htmlPython 在 ctypes 中为我们提供了类似C语言的数据类型,...
  • eleanoryss
  • eleanoryss
  • 2017年04月21日 16:48
  • 428
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言变量类型的本质
举报原因:
原因补充:

(最多只允许输入30个字)