C语言学习笔记(一)

Posted by alonealice on 2017-03-05

大学时期学过C语言,但是各种原因学的不是很完整,同时由于时间久远,很多内容也有点忘记了。所以找了点时间看了一本C语言的入门书籍,快速的把遗忘的和之前没学到的C语言的基础知识简单学习一下,写个笔记以便后面查询。

编程规范

  1. 代码缩进统一为4个字符,使用tab
  2. 常量名全部使用大写,成员变量用m_开始,普通变量,要在前面添加类型的首字母,且名称的首字母要大写如iAge,指针要加p,且首字母大写,如char* pName
  3. 函数名首字母大写,后面大小写混合#

数据类型

  1. 指针类型的值表示是某个内存地址

  2. 无符号短整型范围为0~65535,有符号时范围为-32768~32767,1000L表示长整型,1000U表示短整型(不分大小写)

  3. 在常数前加0表示8进制(数字0,如012)(8进制数据不能出现9),0x表示16进制

  4. Double类型的数据表示也为L,如100.89L

  5. putchar方法可以打印出char字符,printf方法可以打印出有格式的输出,包含整型、浮点、字符、字符串等

  6. 系统会在字符串结尾添加“\0”,所以”H”的长度为2,字符串为定义一般为char*,需测试。如果定义char a[2]=”12345”,那么a的size就是2

    1
    2
    3
    4
    5
    6
    7
    8
    char mm[]="a";
    char mn='a';
    printf("%d\n", sizeof(mm));
    printf("%d", sizeof(mn));

    输出:
    2
    1
  7. 浮点类型除了float和double外,还有长双精度类型long double

  8. 输出时用%f代替浮点型数据,%d代替整型,%c代替字符,%s代替字符串

  9. 输出是字符和int可以相互代替,如%c,输出int,会输出该int值的char值,同理%d

  10. C程序中可以选择变量的不同存储形式,有自动auto,静态static,寄存器register和外部extern,默认情况下就是auto 。如auto inta=3就是int a=3;Register能让程序员把某个局部变量存放在计算机的某个硬件寄存器中而不是内存中。这些不是很理解,据书上说作用不大;Extern声明了程序中将要用到但尚未定义的外部变量。如在a文件中声明extern int a;在b文件中赋值:int a=100;那么在a文件中输出a就是100。

1
2
3
4
5
6
7
8
9
10
main.c文件:

extern int e;
int main(){
printf("%d",e);
}
a文件:
int e=100;

最后输出:100

运算符合表达式,输入输出

  1. 不同类型之间可以进行混合运算,int和char相加就是int和char的ASCII码相加

  2. 逗号表达式,多个表达式分别计算,用逗号隔开,值为第一个表达式,如果用括号括了起来,就是做后的值,逗号表达式不能在初始化时使用

1
2
3
4
5
6
7
8
9
10
11
int a=1+0,2+2;  /*  编译器报错 */

正确使用:
int a;
int b;
a=1+0,2+2;
b=(1+0,2+2);
printf("a值%d,b值%d",a,b)

结果:
a值1,b值4
  1. 字符输出putchar,需要stdio库,只能输出单个字符,字符输入用getchar

  2. 字符串输出用puts,打印时如果字符串里面有\0,会被截断,后面部分不会打印,输入用gets,char[]和字符串可以相互通用如:char a[10];gets(a);

  3. 格式输出printf(“格式”,内容)常用的可是有%d,%o(8进制),%x/%X(16进制,大写时输出也为大写),%c,%s,%f,如果要输出%,则%%

  4. 输出时可以添加附加符号:比如%ld,表示输出长整型,%10s,表示输出10位字符串,如果超过则超过,不超过则前面不空格,%-10s,不足10位时右边补空格,%10.3s,不足10位前面补空格,取字符串的3位,如果是int之类的数据,%10.3d表示输出的除了前面补空格外,输出3位数,如4就输出004,%-10.3s,不足10位后面补空格,取3位。

1
2
3
4
5
int a=3;
printf("a的值%10.3d",tt);

结果:
a的值 003
  1. 输入格式数据scanf(“%d%d”,&a,&b),同样可以添加相应的附加符号如%ld,%hd(短类型)%3s,表示输入的取3位,(%d*%d,a,b)表示输入不赋值。b的值不会变.%s表示输入的字符数组,如a[],不能是地址*p

    1
    2
    3
    4
    5
    6
    7
    char a[10];
    scanf("%s",&a);
    printf("输入的值为%s",a);

    结果为:
    12q
    输入的值为12q