C语言学习笔记

本文介绍了C语言中的基本数据类型如浮点常量、字符串常量,以及变量的概念和不同存储类型如static、extern。还讨论了运算符的逻辑行为,输入输出操作,控制语句如if、for、while,并强调了指针的重要性和使用规则,包括指针算术和二维数组的处理。此外,还涵盖了字符串函数如strlen、strcpy等,以及如何处理输入输出中的遗留字符。
摘要由CSDN通过智能技术生成

数据类型、常量、变量及运算符

浮点常量:+-M.N

1.176e+10=1.176*10的10次方

-3.5789e-8=-3.5789*10的负8次方

可以将字符常量看成一个字节的正整数

字符串常量和字符常量:字符串常量的结尾自带'\0'

%#x :为16进制数自动添加0x前缀

static:默认变量为0,静态储存变量,可在函数内也可以在函数外,局部使用时,内存中以固定的地址存放,只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。

extern:当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。

此两个变量区别在于static修饰的全局变量,其它文件无法使用

auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。

register为寄存器型,将变量放入cpu寄存器,加快运行速度。且不能用&(取址符)获取此变量地址。

float和double不能取余

逻辑运算符:! && ||

遇假&&假

遇真||真

&&逢0截止

||逢1截止

输入输出

c语言中,putchar('\n')输出一个换行符为什么用一个单引号而不用双引号?

字符串使用双引号,字符使用单引号,puchar为char字符类型。

输入函数的垃圾处理:

1.使用getchar()

2.使用scanf(" %c",&c),及在%号前加一个空格

3.使用scanf("%*c%c",&c)

gets与scanf的不同在于gets函数并不以空格做为字符串输入结束的标志。

控制语句

控制语句:

分支 if else switch

循环 for while do while goto

辅助控制 continue break return

语句块:当有多条语句时,注意用{}括起来

表达式:一般为逻辑表达式或者关系表达式

也可以为任意类型(整型,实型等)

要注意区分if(x=1)和if(x==1)的区别

枚举关键字enum

例如 enum weekday{sun,mon,tue} a;

break:强制退出switch体

使用goto的优势:当函数有多个出口时,使用goto把这些出口集中到一处是很方便的,同时,它的无条件跳转易于理解,可以减少嵌套,可以避免那种忘记更新某一个出口点的问题,算是帮助编译器做了代码优化。

利用goto和while实现循环输入:

while

goto

break:用于从循环体内跳出循环体,提前结束循环。break只能用在循环语句和switch语句中。break提前结束一层循环。continue 和 break区别在于:continue只结束本次循环,而break终止本层循环。

数组和字符串

对于地址和指针的访问使用%p

C语言对数组不作越界检查

数组必须以元素为单位

二维数组定义:声明一个二维数组时,列数不能省略,行数可以

当使用的不是for循环输出一串字符数组时,要注意字符数组是否以\0结尾

C语言中没有字符串变量,用字符数组处理字符串。字符串的结束标志:'\0'

sizeof:计算字符串空间数

strlen:计算字符串到\0截止

字符串长度函数strlen:计算字符串长度,返回字符串实际长度,不包括'\0'在内,\xhh表示十六进制数代表的符合,\ddd表示8进制

strcpy:拷贝一个字符串到字符数组中

返回值位字符数组的首地址

目标字符数组必须够大,且拷贝过程中'\0'一同拷贝

strcat:将字符数组2链接到数组1的后面,返回数组1的首地址。链接前两个数组均以\0结尾,链接后串1的取消。

strcmp:比较两个字符串,将两个字符串从左至右逐个比较,比较ASCII值,直到遇到不同的字符或者\0位置,若字符串1>字符串2,返回正整数,若字符串1<字符串2,返回负整数,

若字符串1=字符串2,返回0

strchr:在字符串中找到第一个目标字符的地址

strrchr:在字符串中找到最后一个目标字符的地址

strcasecmp:忽略大小写比较字符串

strstr:查找指定长串中的子串

isalpha():检查是否为字母字符

isupper():检查是否为大写字母字符

islower():检查是否为小写字母字符

isdigit():检查是否为数字

tolower():转换为小写字符

toupper():转换为大写字符

指针

在计算机的内存中,每一个字节单元都有一个编号,称之为地址。

如果指针指向的区域是程序中的一个变量的内存空间,那么这个变量称为指针的目标变量,简称为指针的目标。

*p = *(&x) = x

p :指针变量,是地址量

*p :指针所指向的对象,内容是数据

&p :指针变量占用的储存区域的地址,是个常量

向一个指针变量赋值时,赋的值必须是地址常量或者指针变量,不能是普通的整数

两个指针相减不是两个指针持有的地址值相减的结果,而是一个整数值,表示两个指针之间相隔数据的个数。

*p++:++先进行运算,但是做为后缀表达式,最终的值还是运算之前的值

a[i] = *(p+i) = *(a+i) = p[i]

对于二维数组和指针,a[i][j] = (*p)[j]

二维数组中,a[i]是以行进行遍历,而*p[i]则是进行逐个遍历

a[i][j] = p[i][j] = *(*(a + i) + j) = *(*(p + i) + j)

a[i]是常量,而p[i] 则是变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值