您的位置:首页 > 编程语言 > C语言/C++

C语言大纲——数据类型

2016-06-08 18:24 323 查看
(此为博主整理篇,部分引用梁庚老师的《高质量嵌入式Linux C编程》+部分百度+博主理解,如有错误欢迎指正~)

一、如何定义变量

(左右法则) The right-left rule:Start reading the declaration from the innermost parentheses, go right,and then go left.When you encounter
parentheses,the direction should be reversed.Once everything in the parentheses has been parsed,jump outofit.Continue till the whole declaration has
been parsed.

右左法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

例:

1、用变量a给出下列定义

a) 一个整型数(An integer):int a;

b) 一个指向整型数的指针(A pointer to an integer):int *a;

c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a

pointer to an integer):int **a;

d) 一个有10个整型数的数组(An array of 10 integers):int a[10];

e) 一个有 10 个指针的数组,该指针是指向一个整型数的(An array of 10

pointers to integers):int *a[10];

f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers):

int (*a)[10];

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer

to a function that takes an integer as an argument and returns an integer):

int (*a)(int);

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返

回一个整型数( An array of ten pointers to functions that take an integer

argument and return an integer ): int (*a[10])(int).

2.int *(*(*arr[5])())():

arr是一个数组,数组中存储的是5个指针,设为P0,P0指向无参数的函数F0,F0的返回值是指针P1,P1指向一个无参数的函数F1F1的返回值为int型指针

总的来说arr是一个存储5个函数指针的数组,这5个函数都无参数,且返回一个函数指针,这个新的函数没有参数并返回整型指针.

二、变量字节长度、取值范围

1.sizeof VS strlen:

sizeof是运算符不是函数,strlen是函数;

sizeof 计算字符串长度时候会把最后的 '\0' 算进去,而strlen 不会。所以一般结果就是 sizeof 计算出来的长度 比 strlen的长度要多1个字节。例如:这个sizeof("hello")=6,而strlen("hello")=5。

但是sizeof 在计算数组的时候,是计算这个数组的最大长度,而不是数组内部数据的长度。所以问题中的 strlen结果是5,而sizeof结果是10 。'\n'也占一个字节。

除此之外,还要注意,当sizeof后面带一个指针的时候,实际上是计算指针的长度,一般32位设备

指针长度是4个字节。而strlen依然是计算指针指向的长度。

例:取值范围:char:有符号:-128~127

无符号:0~255.

三、计算机数据的存储

原码、补码、反码

二进制、十进制、十六进制 8421码

例:-1.25的二进制

整数部分除2倒取余,小数部分乘二取整。比如 -1.25 (假设整数部分用8位来表示)

值为:10000001.01(最前面的1为负号)

四、变量与常量

全局变量与局部变量:(以下为引用《高质量嵌入式Linux C编程》部分)

局部变量:

主函数中定义的变量只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点与其他的语言是不同的,应予以注意。

行参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。

允许在不同的函数使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。

在复合语句中也可定义变量,其作用域只在复合语句范围内。

全局变量:

全局变量也称为外部变量,它是在函数外部定义的变量,它不属于哪一个函数,它属于一个源程序文件,其作用域是整个程序源。

五、Linux进程虚拟地址空间分布图

(栈空间、堆空间、全局变量区、bss、or、静态数据区)你的数据放哪里?
六、输入、输出
输出:printf、putchar、puts、putc、fputs、fputc、fwrite
输入:scanf、gets、getchar、fread、fgets、fgetc.
获取字符串的方法:scanf、gets、getchar、fgetc.
Printf和scanf 的使用注意事项及技巧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息