第3章,数据

基本数据类型

在C语言中,仅有4种基本数据类型----整形,浮点型,指针和聚合类型(数组和结构),所有其他的类型都是从这4中基本类型派生而来的。

整形家族

包括字符、短整形、整形和长整型,他们都分为无符号和有符号两种版本。

整形字面值

就是平时写的诸如 123这样的字面值,当一个程序内出现整形字面值时,它是属于整形家族9中不同类型中的哪一种呢?答案取决于字面值是如何书写的。但是你可以在有些字面值的后面添加一个后缀(L/L,U/u)来改变缺省的规则。在缺省的情况下,一个整形字面值的类型是能容纳这个值的最短类型。

整数还可以用八进制(在数值前面以O开头)和16进制表示(在数值前面以Ox开头),类型规则和上面一样。

字符常量的类型总是int,你不能加后缀什么的。

枚举类型

定义一个枚举类型:enum Jar_Type  {dafanzi,xiaofanzi,pupuying};

使用枚举类型:Jar_Type name=pupuying;//这个和Jar_Type name=3是一样的,声明为枚举类型的变量实际是整型。

浮点类型家族

像小数和数值较大的整数(无法按证书类型存取)的数都可以用浮点数的形式存储。

浮点数字字面值总是写成十进制的形式,它必须有一个小数点或一个指数,也可以两者都有。

浮点数家族包括float,double和long double三种类型。

浮点数字面值在缺省情况下都是double类型的,除非它的后面跟一个L或l表示一个long double的值,或者跟一个F或f表示它是一个float类型的值。

指针

指针也是一种数据类型,这种数据类型存的是变量的地址(也就是内存中的地址,其实也是虚拟地址空间)。另外指针的大小是跟硬件相关的,大小直接和数据总线的宽度有关,数据总线的宽度决定了虚拟地址空间的大小,也决定了指针的大小。

指针常量和其他数据类型常量不一样,你总没见过谁写FFF2223FFFFFF这种地址常量吧,都是直接对变量用&求得一个地址常量的。

字符串常量,C语言中没有字符串类型,不过有字符串常量,诸如"dafanzi2333"。(小tips,字符串常量可以为空字符串,而字符常量是不能为空字符的)。每次使用字符串常量的时候要记住,它本身所代表的值是这些字符串的存储地址,而不是这些字符本身。因此,你可把字符常量随意复制给一个“指向字符的指针”,后者指向这些字符所存储的地址。但是你不能把字符串常量赋值给一个字符数组(用一个字符串常量初始化一个字符数组例外,更准确的说,当用于初始化一个字符数组时,它就是一个初始化列表,在其他任何地方,都表示一个字符串常量),因为字符串常量的直接值是一个指针,而不是这些字符串本身。

#include

int main()

{

char name[]="Dafanzi";

name="xiaofanzi";  /*报的错是zfccl.c:5: error: incompatible types when assigning to type 'char[8]' from type 'char *'

*/

}

基本声明

数组声明的理解:int array[20];说明array这个面临按下标访问某个确定元素后,这个元素代表的是整形,因而array是一个整形数组。

指针声明的理解:int *a :这条语句的表达式产生了int,在知道*为间接访问操作后,就知道了a肯定是一个指向int的指针。

隐身声明

C语言有几种声明,它的类型名可以省略。例如,函数如果不显示地声明返回值的类型,它就默认返回整形。

typedef

typedef的写法和普通的声明基本相同,只是把typedef这个关键字放在声明的前面。

常量

作用域

代码块作用域:位于一对花括号之间的所有语句称为一个代码块

当代码块嵌套时,内层代码块和外层代码块有同名变量时,这个名字变量的访问方式就和全局变量和局部变量访问的模式一样。

K&R C函数参数和函数体是两个不同的作用域,相见C和指针41页。

文件作用域:任何在所有代码块之外的标识符都具有文件作用域,它表示这些标识符从他们的声明之处到它所有的源文件结尾指出都是可以访问的。

在头文件中编写并通过#include指令包含到其他文件中的声明就好像他们是直接写在那些文件中一样,他他们的作用域并不局限于头文件尾。

原型作用域:原型作用域就是指函数的原型声明中的参数名不能相同,必须都唯一。

函数作用域:语句标签用于goto语句,一个函数中的所有语句标签必须唯一。不提倡使用goto语句。

链接属性:

标识符的链接属性决定如何处理在不同文件中出现的相同名字的(并且属于同一个作用域)标识符,链接属性和作用域有关,但这两个属性并不相同,默认的文件作用域的变量(全局变量和函数)都具有external的链接属性,默认的代码块作用域都具有none链接属性。

连接属性一共有3种,extern(在不同源文件也是指同一个),internal(同一个源文件是同一个),和none(总是被当作独立不同的)。

关键字extern和static用于在声明中修改标识符的链接属性的。如果某个声明默认是extern属性,在它前面加上static可以使其链接属性变为internal,static也只对默认是extern的声明才有效果。

extern关键字就有点复杂,它可以在任何地方修饰一个变量声明,以引用在其他源文件中声明的外部变量。

int a=66; /a.c/

int main()/b.c/

{

extern int a;

printf("%d\n",a);

}

切记extern不是指可以在任何地方创建一个外部变量,而是指可以在本源文件中任何一个地方对一个变量声明进行特殊标记以引用其他源文件的外部变量 。

存储类型

变量的存储类型是指存储变量值的内存类型。有三个地方可以用于存储变量:普通内存,运行时堆栈,硬件寄存器。

凡是在任何代码块之外声明的变量和代码块内用static声明的变量都属于静态变量。静态变量在程序整个声明周期都存在,其值在可执行文件载入内存的时候就会自动初始化,指定了值的赋指定的值,没赋值的指定为0。

在代码块内部声明的变量的缺省类型是自动的,其有auto关键字修饰,这种变量都是放在运行时堆栈的,声明周期只属于所在代码块在运行的时间。

关键字register可以对默认为自动变量的变量进行修饰,使其变成一个寄存器变量。注意的是你声明多个寄存器变量,实际上只有几个变量是使用了寄存器,或者压根都不适用寄存器,这个是由编译器决定的,一般设置寄存器的原则是对频繁使用的使用寄存器变量。

static关键字

函数定义或者代码块之外的变量声明,其为改变链接属性的。当位于代码块内部的变量声明时,其为修改变量的存储类型的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容