[C程序设计语言]第一部分
数组... 1
extern. 3
“定义”与“声明”... 3
变量命名规则... 3
数据类型... 3
算术类型提升与转换规则... 5
void. 5
\000、\xhh. 5
ANSI C中所有转义字符... 6
\0. 6
数组
局部数组定义时如果未指定长度,又未指定数组内容,则编译报错。但全局的好像可以在定义时不指定长度的情况下也不指定数组内容,但编译时会有警告,内存全清零,并可以对它进行某个元素的读写,但如果下标索引过大可能引起内存读写错误。
在定义数组时可以不指定数组长度,而只指定数组内容。也可既指定长度,又指定数组内容。
C语言中的定义的多维数组是定长的,不像Java那样可以在定义时不指定多维数组长度,而指定不同长度的维度内容,如果C中如此定义,则列的长度为某个维度中最长的长度。
如果在C语言要定义多维不定长的数组,则只能通过指针的形式来指定多维数组,即数组里的非第一维采用指针形式定义,如字符串指针数组。
C语言中的字符串可以使用一个最末元素为’\0’的空字符来定义。也可将一个字符串直接赋值给一个数组。
定义多维数组时,除了第一维不需要指定大小外,其他维都需要指定数组大小。
Java在声明一个数组时,不能指定数组大小,这与C不同,在new时可以省略后面的维度大小,不能省略前面而指定后面大小: int b[][][]= newint[1][][];也可以这样:int a[][][] = { { { 1 }, { 2, 3 } } };,C语言只允许以后面这样形式定义: int a[][1][1] ={{{1}}};,只允许省略第一维大小(在有初始化的情况下,如果定义时未马上初始化,则第一维也不能省略),也可都不省略,但最好别省略,且初始化时定义时大小与初始化的大小一致,否则容易出问题。
如果初始化值的个数少于数组元素的个数,剩余的元素被自动初始化为(多维数组也是这样),例如,可以用下面的语句将数组n的元素初始化为0:int a[10]={0};。但千万要记住:数组的元素不会被自动初始化为0——程序员至少要把第一个数组元素初始为0才能使剩下的元素自动初始化为0。
C语言不检查数组是否越界。
如下的数组声明会导致语法错误,因为数组元素只有5个而初始化值却有6个:int a[5] = { 1, 2, 3, 4, 5, 6 };,初始化值列表中的初始化值个数多于数组元素的个数是一种语法错误。
如果在声明带有初始化值列表的数组时省略数组的大小(如果没有初始化列表则不能省略),那么数组元素的个数就是初始化列表中的元素个数,例如:int a[] = { 1, 2, 3, 4, 5, 6 };,建立一个有6个元素的数组。
声明为static的数组是在编译时一次性初始化的,如果程序员没有明确地初始化静态数组,那么编译器把它初始化为0。
数组实际上就是数组的第一个元素的地址:
int main(int argc, char * argv[]) {
char array[5];
printf("%p \n", array);//0022FF4B
printf("%p \n",&array[0]);//0022FF4B
return 0;
}
转换说明符。
在将多维数组做为函数的参数时,第一个下标也是不必要的(如果写了编译器也会忽略掉),但是要给出其后其他所有的下标,因为编译器要用这些下标确定这些元素在内存中的位置,不管数组的下标有多少个,所有的元素都是在内存中连续存放的,所以编译要根据第一个下标后面所其他下标来定位元素(定位时需要跳过多少个元素):void printArray(int a[][3])
多维数组的数组名为第一维中第一个元素(可能又是一个多维数组)的地址。
extern
如果程序包含在多个源文件中,而某个外部(全局)变量在file1文件中定义、在file2和file3文件中使用,那么在文件file2与file3中就需要使用extern声明来建立该变量与其定义之间的联系。
“定义”与“声明”
“定义”表示创建变量或分配存储空间,而“声明”指的是说明变量的性质,但不分配存储单元。
下面即是声明:int lower,upper,step;
声明用于说明每个标识符的含义,而并不需要为每个标识符预留存储空间,预留存储空间的声明称为定义。
变量命名规则
与Java一样 A$0
标准规定,标识符前至少31个字符有效,在某些实现中,有效字符可能会更多。
数据类型
char
int
float
double
short (int)
long (int)
float
double
long double
int通常代表特定机器中整数的自然长度。位,位,或位。各编译器可以根据硬件特殊自主选择合适的类型长度,但要遵循下列限制:位,而位,并且表示真,表示假
整型常量若以字母u或U为后缀,则表示它是一个无符号数;若以字母1或L为后缀,则表示它是一个长整型数;若以字母UL为后级,则表示它是一个无符号长整型数
整型常量的类型同它的形式、值和后辍有关。如果它没有后缀且是十进制表示,则其类型很可能是int,long int或unsigned long int;如果它没有后缀且是八进制或+六进制表示,则其类型很可能是int,unsigned int,long int,unsigned long int;如果它的后缓为u或U,则其类型很可能是unsigned int,ungigned long int;果它的后缓为l或L,则其类型很可能是unsigned int,ungigned long int
C中的整型常量默认都是int类型的常量,但如果一个整数太大以至于无法用int类型表示时,也将被当作long类型处理。
无符号常量以字母u或U结尾。后缀ul或UL表示是 unsigned long类型,通常用在八进制或十进制常量后面来标示最高位到底是符号位还是数字位,而开头,十六进制使用0X开头。
0XFF=255 char
0XFFFF=65535 short
0XFFFFFFFF=-1 int
如果十六进制常量位数不达到整型int所占位数时,常量首位被看作数字位,而非符号位,如果超过int,则按long来处理。
unsigned short a=0xFFFF ,则a=65535,但如果去掉unsigned修饰符后,a=-1,这也从另一方面验证了“整型常量默认都是int类型的常量”
unsignedshort a1 = 0xFFFF;
short a2 = 0xFFFF;
printf("%d \n", a1);//65535
printf("%d \n", a2);//-1
printf("%d \n", 0xFFFF);//65535
unsignedshort a3 = -1;
short a4 = -1;
printf("%d \n", a3);//65535
printf("%d \n", a4);//-1
printf("%d \n", -1u);//-1
在C中可以将大的数据类型赋给小的数据类型(比如将long赋值给short类型的变量),不像Java那样需要强转:否则非法。
当把较长的整数转换为较短的整数或char类型时,超出的高位部分将被丢弃。如将一个float类型赋值给一个int类型变量时,小数部分将被截取掉;但当把double类型赋值给float类型时,是进行四舍五入还是截取这取决于具体实现。
算术类型提升与转换规则
首先,如果任何一个操作数为 long double 类型,则另一个操作数转换为 long double 类型。
否则,如果任何一个操作数为 double 类型,则将另一个操作数转换为 double 类型。
否则,如果任何一个操作数为 float 类型,则将另一个操作数转换为 float 类型。
否则,如果任何一个操作数为 unsigned long int 类型,则将另一个操作数转换为 unsigned long int类型。
否则,如果一个操作数为 long int 类型且另一个操作数为 unsigned int 类型,则结果依赖于long int类型是否可以表示所有的unsigned int类型的值。如果可以,则将unsigned int类型的操作数转换为long int;否则将两个操作数都转换为usigned long int。
否则,如果一个操作数为long int类型,则将另一个操作数转换为long int类型。
否则,如果任何一个操作数为unsigned int类型,则将另一个操作数转换为unsigned int类型。
否则,将两个操作数都转换成int类型。
注,表达式中float类型的操作数不会自动转换成double类型(在没有double类型操作数的情况下,与int类型不同)
假定int类型占有16位,long类型占32位,那么,-1L>1UL,这是因为-1L将被提升为unsigned long类型,因而成为一个比较大正数。
void
void对象的(不存在的)值不能够以任何方式使用,也不能被显式或隐式地转换为任一非空类型。因为空(void)表达式表示一个不存在的值,这样的表达式只可以用在不需要值的地方
可以通过强制类型转换将表达式转换为void类型。
\000、\xhh
\000最大字符可表示为 \377,第一位不能大于3(在有三位的情况下),因为一旦大于,则表示的总位数会大于8位。注,也可只使用2位8进制位来表示,则此时第一位就可以使用大于3的数表示了,另外也可只有一位,比如空字符 \0。
\378此时表示两个字符 \37 与 8
\xhh一样,最多两位,也可以只有一位十六进制。
ANSI C中所有转义字符
\a 响铃
\b 回退
\f 换页
\n 换行
\r 回车
\t 横向制表
\v 纵向制表
\\
\\?
\’
\”
\000
\xhh
\0
字符常量 ‘\0’ 表示值为0的字符,也就是空字符(null),但我们通常用 ‘\0’ 的形式代替 0 ,以强调某些表达式的字符属性,但其数字值为0
[C程序设计语言]第一部分的更多相关文章
- c程序设计语言第一章3
字符数组是C语言中最常用的数组类型.下面我们通过编写一个程序,来说明字符数组以反操作字符数组的函数的用法.该程序读入一组文本行,并把最长的文水行打印出来.该算法的基本框架非常简单: while (还有 ...
- c程序设计语言第一章1
1,c程序都是由函数和变量组成的. 练习1.6验证布尔表达式getchar()!= EOF的取值是0还是1 答: #include <stdio.h> #include <stdli ...
- c程序设计语言第一章5
练习1.20请编写程序d e t a b
- c程序设计语言第一章4
(昨天网络出现了问题,导致这篇没来得及上传,再次补上,今晚照常上传笔记) 练习1.19编写函数r e v e r s e ( s )将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个 ...
- c程序设计语言第一章2
练习1.13编写一个程序,打印输入中单词长度的直方图.水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些 #include <stdio.h> #include <stdlib ...
- C程序设计语言(第二版)习题:第一章
第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...
- C程序设计语言笔记-第一章
The C Programming language notes 一 基础变量类型.运算符和判断循环 char 字符型 character ...
- python程序设计语言笔记 第一部分 程序设计基础
1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...
- c语言第一章第一节 认识变量
声明:本人大一新生,闲着无聊..写写c语言教程..菜鸟一枚..大神勿喷!!! 接下来我们都用dev来进行编译..vc++太古老了,没提示功能,不好上手,并且老是出毛病..vs太大了,编个c不至于,运行 ...
随机推荐
- python中遇到的各种问题
一 编码问题 python的默认编码是ascii码,可以修改为utf-8 在python\Lib\site-packages\下添加一个文件sitecustomize.py 内容是 import sy ...
- flex mx组件和s组件的字体兼容性不一致
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.8.Datepicker控件
默认datepicker的安装启用 探索它的配置选项 安装启用一个触发按钮 配置一个供选择的动画 dateFormat选项 简单的国际化 多月datepicker 日期范围选择 datepicker的 ...
- java.security.NoSuchAlgorithmException: DES KeyGenerator not available
更改jre,点击项目build path-->configure build path-->libraries-->jre library system-->edit--> ...
- Hadoop集群管理之配置文件
一.配置文件列表如下: [hadoop@node1 conf]$ pwd /app/hadoop/conf [hadoop@node1 conf]$ echo $HADOOP_HOME /app/ha ...
- mongo 学习教程(全)
看的是爱酷学习网的视频:http://www.icoolxue.com/album/show/98 01 安装 1.先建mongoDB-data文件夹存数据 2.安装DB 3.设置环境变量:把bin目 ...
- destoon短信接口修改方法
destoon是很优秀的B2B行业站程序.程序模块化开发契合度很高,二次开发起来也很顺畅.数据缓存,权限分配,SEO功能方面都不错. 但是在使用这套程序的时候,常常要用到发送短信的功能,而destoo ...
- YTU 3006: 迷宫问题(栈与队列)
3006: 迷宫问题(栈与队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 1 题目描述 编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径 ...
- c# 中crystal report输出PDF文件
工程中引入以下crystal report的类库crystaldecisions.crystalreports.enginecrystaldecisions.reportsourcecrystalde ...
- JAVA基础知识之Collections工具类
排序操作 Collections提供以下方法对List进行排序操作 void reverse(List list):反转 void shuffle(List list),随机排序 void sort( ...