各位学习C语言的同学们好,下面我将进行C语言学习的记录,c++是在C语言的基础上发展而来二者有许多相似相同的地方,在学习过c++之后,类比学习C语言的学习要容易点,同时注意部分语法的不同。
从最简单的hello world,格式说明符。数据类型 原反补码,常量 变量,变量的存储类型。
1. 从hello world 开始。
程序开始的头文件,与c++相差无几,注意.h的后缀。
printf是C语言输出打印语句,区别于c++的cout,\n是一个转义序列用于在输出是插入一个换行,类比于endl。
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
2.格式说明符,
在C语言中 ,格式说明符是一种特殊的字符序列,用于在字符串中指定如何显示或者读取数据,程序中的%d是用于输出一个十进制整数,同时找到其他常见的格式说明符如下
- %d:用于输出一个十进制整数。
- %i:与
%d
类似,用于输出一个整数。 - %u:用于输出一个无符号整数。
- %x:用于输出一个十六进制整数(小写字母)。
- %X:用于输出一个十六进制整数(大写字母)。
- %o:用于输出一个八进制整数。
- %f:用于输出一个浮点数。
- %e:用于输出科学计数法形式的浮点数。
- %g:用于输出浮点数,根据数值的大小自动选择
%f
或%e
。 - %c:用于输出一个字符。
- %s:用于输出一个字符串。
- %%:输出一个百分号(%)字符。
3,数据类型;
基本的数据类型如上。
学习过程中注意,
逻辑型bool只有ture和false两种,即逻辑真和逻辑假(即0和1)。
C 语言中使用bool类型通常要加头文件<stdbool.h>
bool类型通常只占一个字节大小
字节长度与值域。(学过计组应该比较清晰)
在使用的时候要注意,不要超过值域,否则会出错,但并不容易发现。
各类型的字节在不同的编译器中是不同的 ,其他类型的字节可以在程序中用sizeof()求证。
4.原反补码,
在计算机中内存的存储方式是补码,主要注意到的是这一点,因为之前c++与计算机组成原理中均有学习,不再记录。
5。常量
分为整形常量,浮点常量,指数常量,字符常量,字符串常量,标识常量。
浮点常量:又称为实数,一般含有小数部分。只有十进制实数单双精度,有两种表示方法,一般形式和指数形式。
字符常量,字符常量的值等于字符阿斯克码的值,
\字符串常量:指用双引号括起来的一串字符来表示的数据(字符串以\\0结尾)
标识常量(宏常量):注意的是宏定义只是简单的替换,有些地方的运算要注意。
6,变量,
这里的变量名和c++中相同,数字,字母,下划线,(不能以数字开始,也不能和c的关键字重名)
变量所占据的空间大小由其数据决定。
变量在内存空间中的首地址,称为变量的地址,
注意:之前在c++没注意到的变量在程序中使用时,必须说明他们的储存类型和数据类型, 一般形式为<存储类型><数据类型><变量名>
<存储类型>是关键字auto,static,extern,register。
<数据类型>是基本数据类型,也可以是自定义的数据类型。
auto 说明的变量之能在程序的某个范围内使用,通常在函数体内和函数的复合语句中使用(默认是随机数),在C语言和c++中通常被省略。
register: 这个之前没看过,称为寄存器型。register变量想将变量放在cpu的寄存器中,这样可以加快程序的运行速度。它必须是寄存器可以接受的类型,这通常意味着register必须是一个单个的值,并且长度应该小于或者等于整型的长度。
需要注意的是并不能通过&来获取register变量的地址。在c和c++中现在的编译器都能自动决定哪些变量应该放到寄存器中 ,因此register使用的较少。\n\nstatic:静态储存类型。
static:静态储存类型,定义在函数体内为局部静态变量,它由静态存储周期,它的值不会在函数调用结束时消失。函数体外为全局静态变量,只能在定义的该文件内使用。静态函数,使用static定义的函数只能在文件内使用。
与c++相比,c++中的类静态成员和类静态成员函数是特性。
extern:外部变量,通常用于具有外部链接的变量与函数,这意味着这些变量或者函数的定义在当前文件或者其他文件中已经存在。并且可以在多个文件中共享。为了避免重复定义。
值得注意的是,c++的extern与c相同,但他还支持命名空间,通常作用于控制域和避免名称冲突。