c语言学习笔记

C语言学习重点的知识点:

1. 关键字:函数的,字符串的等部分常见的关键字;

2.  字符串的拷贝,数组和指针实现;和内存有关;

3.  对内存的操作;计算内存地址; 

4. 算法必须熟练;

C基础

1. 变量的类型和大小

char, float ,int  ,long, short等字节长度;

char: 1个字节

float:4个字节

int: 4个字节

short:2个字节

Long: 4个字节

long long:8个字节

double: 8个字节

char a[10]:10个字节

int a[10]:40个字节

float a[10]:40个字节

2. 指针的字节大小

char *ptr1;      sizeof(ptr1) = 4;

int *ptr2;     sizeof(ptr2) = 4

float *ptr3;  sizeof(ptr3) = 4

指针存放的是地址值,地址是四个字节,地址指向的空间大小另算 

void *p =malloc(100);  仅仅表示p可以转换成char *,int* 等,是没有void *的;

3.C的数据类型:

 a. int ,char .float

 b. struct ,数组,enum, union;

 c. 指针; 

 d void  类型;

 

3 常量,变量;

unsigned int  a;  (0~ 2^32 -1);

int;  -2^31~2^31-1

unsigned  int  ; 0~2^32-1;

short ;   -32768~32767

unsigned short: 0~2^16-1;

4.整型数据的溢出

unsigned  short  a = 65535;

unsigned short b = a +1;

那么.b= 0;

 

如果是有符号数:

 short  a = 32767;

 short b = a +1;

那么.b=-32768;

 

正向整型数益处以后,从最小开始,无符号从0开始,有符号从负的最小值开始;

反向溢出时,从正的最大值开始;

5. 字符变量

1)单引号‘’表示字符,双引号" "表示字符串;

2字符变量只占一个字节;

6.stcpy的使用

char c1 ,c2[10];

 

c1 = 'a';

c2 ="a";-----会出段错误;正确的写法:strcpy(c2, "a");

7. 地址

char a[100]="hello";

printf("%d\n",a);-----显示-1077796936,是个负数,因为地址最高位为1,被看成了符号位,认为是负数

printf("%x\n",a);-----显示bfc21fb8,是个地址;

8. 移位运算符<< , >>

0000 0010 << 1;变成0000 0100 ,相当于乘以2,扩大2倍;

               >>1, 变成0000 0001,相当于除以2,减小2倍;

9.数组越界

int a[100];  a是一个整型数组,有100个元素,a[0]~a[99]

a[100]:  在函数中出现的时候,这个错误叫做越界

10. 有符号,无符号存放在内存中都是补码的形式;

正整数:原码,反码 ,补码都一样; 

如3:

原码:0000 0000 0000 0011

反码:0000 0000 0000 0011

补码:0000 0000 0000 0011

如-3:

原码:1000 0000 0000 0011  

反码:1111 1111 1111 1100  在原码的基础上,符号不变(最高的1),其余取反

补码:1111 1111 1111 1101  在反码的基础上,+1; 

11.运算顺序

a=12;

a+=a-=a*a;

a-=a*a; ==> a= a-a*a=12-12*12; ==-132;

a+=a; a=-132-132=-264;

12.逗号运算符

表达式1,表达式2,表达式3,表达式4,  最终的值是表达式4的值

13. 输入输出函数

字符的输入输出函数:putchar(), getchar()

字符串的输入输出函数:gets(). puts();

格式化的输入输出函数:scanf();printf();

 

putchar(a); 把字符a输出到显示器;

函数原型:int putchar(int c);     

int getchar();   输入的字符到返回值中;

14.格式化的输入输出

%d:带符号的十进制;

%o:无符号八进制;

%x:无符号十六进制;

%u:无符号十进制;

%c:字符形式,一个字符;

%s:字符串的形式;

%f:实数的形式;

%e:指数的形式;

%g:宽度较短的%f, %e的形式;

 

L:长整型数;

M(正整数):数据的最小宽度;

N(正整数):对实数,表示n个小数;

                 对字符串,表示截取多少个字符;

“-”:靠左对齐;

 %6.2s“hello”   输出 6列 ,只取 he,前面补四个空格 ;右对齐 

%- 6.2s“hello”   输出 6列 ,只取 he,后面补四个空格 ;左对齐 

 %6.2f : 1.2345  , 输出的 时候 是  1.23,前面补3个空格 ;右对齐 

%-6.2f ,  同上,右面补空格,左对齐 

15.scanf()

int a,b,c;

scanf("%d,%d,%d",&a,&b,&c);

输入时 :1,2,3,输出为:1,2,3

输入: 1 2 3     输出  1   不定数据 

 

char s1[100];

scanf("%s", s1);

printf("%s\n", s1);

输入: hello  输出 : hello

输入 : hello world  输出 : hello

scanf 遇到空格 结束 输入 

注意:读取字符串时,每读完一串要用getchar();清空缓存区

16.gets  

输入一个字符串

函数的原型: char *gets(char *s);

char *str="hello world!";------碰到char*  就要想到字符串,指向的是字符串;

函数返回值:如果返回s的指针,正确;

               如果返回NULL, 表示操作出现问题,错误;

函数的参数: char  *s: 表示从输入设备输入的字符串存放到s所指的空间:

注意:gets()在linux 中认为非常危险,容易出现内存问题;

 17. puts

函数的作用:输出一个字符串;

函数的原型:int puts(const char *s);

18.const: 修饰的内容不允许被直接改变;

1) const   char *s:

char *s---- s所指向的字符串;s---是指针变量

两个理解:

1. const  修饰的char *,还是s?

   const 在这里修饰的是char *;不是s

2. 是char  *所指向的字符串不允许改变,还是指针变量s不允许改变?

 char *  所指向的字符串不允许被改变; s的地址是可以改变的;

2)  char  * const  s;

表示指针变量s的内容不允许改变; 

3) const  char * const s;

表示:char *所指向的字符串不允许被改变;指针变量s不允许被改变;

const char *str-----------*str不允许改变

char const *str-----------*str不允许改变

char *const str----------str内容不允许改变,即地址不变

const char *const str ----str*str都不允许改变

19. 死循环的两种方式

a)while1{语句;}

b)for;;{语句;}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值