C语言学习日记3
Posted 我光吃饭不洗碗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习日记3相关的知识,希望对你有一定的参考价值。
昨天又偷懒了哎,简直没救了我。
今天魔兽首映!ohyeah!好期待啊~虽然好像爆出很多消息说其实是烂片。
1、函数应用:math.h
int abs(int i)//求绝对值
long labs(long i)//求长整型绝对值
double fabs(double i)//实型绝对值 ps:常量后可加写 u,l,f 加以区别
double sin(double i)//正弦函数
double cos(double i)//余弦函数
double tan(double i)//正切函数
字符和字符串函数:ctype.h
int isalpha(int ch)//该函数功能是检测字母,如果ch是字母表中的字母(大小写),则返回非零,否则返回0
int isdigit(int ch)//该函数功能是检测数字,如果ch是数字,则返回非零,否则返回0.
int isalnum(int ch)//检测字母或数字,如果ch是字母或数字,则返回非零,否则返回0.
2、变量存储类别。
程序区
静态存储区
动态存储区
auto:自动变量,不写默认auto,属于局部变量,动态变量。
static:声明静态变量,(static声明函数时是内部函数)static定义外部变量时会得到静态全局变量,定义内部变量时得到静态内部变量
静态变量和自动变量的区别:
(1)静态存储类型的局部变量是在静态存储区内分配内存单元,在程序的整个运行期间内都不释放内存空间。而自动类型的局部变量属于动态存储类型,是在动态存储区内分配存储单元的函数调用结束后存储单元即被释放。
(2)静态局部变量是在编译时赋初始值,并且只赋一次初值,在以后每次调用函数时,都不再重新为其赋值,只是使用上一次函数被调用结束时变量的值。而自动局部变量的初值不是在编译时赋予的,而是在函数调用时赋予的,每调用一次函数都重新对变量赋一次初值。
(3)如果定义的局部静态变量没有对其进行赋值,则该变量的默认值为0,或者为空字符串。而对于自动局部变量来说,如果不赋值则变量的值是不确定的,这是因为在函数被调用时,会为该变量分配一个存储空间,函数结束时空间被释放。在下次调用该函数时,又会重新分配一个存储空间,这两个分配的存储空间是不一样的,存储空间中的值也是不确定的。
register:声明寄存器变量(适用于一些要频繁进行运算的变量)
ps:(1)寄存器类型变量属于动态存储方式。只有动态局部变量才能被定义为register类型。
(2)将变量定义为register类型后就不能使用取地址&操作了,因为寄存器是没有内存地址的。
extern:声明外部变量
其作用域是从变量的定义处开始,到本文件的结尾处结束。存储在静态存储区中。
如果程序包含多个文件,如何在一个文件中定义一个变量,在其他的程序文件中也可以被调用?
在一个文件中声明这个外部变量,然后在另一个文件中使用extern对这个变量进行外部变量声明。例1.c int a; 2.c extern a;
编译器在编译时,如果遇到extern,则首先在当前文件中查找外部变量的定义,如果找到了,就将作用域扩展到当前的文件中,如果没找到,会在连接时在其他文件中进行查找,如果在连接时找到了该变量,就将变量的作用域扩展到多个文件中,如果找不到,就弹出错误提示。
static:声明静态外部变量。static声明的外部变量只能在当前文件中使用,其他文件即使extern声明也调用不了。
3、指针!~!
一个变量的地址称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址,它就是指针变量。
(1)指针变量的一般形式:类型说明 * 变量名
(2)指针变量的赋值:指针变量和普通变量一样,使用之前不仅要定义,而且必须赋予具体的值。未经赋值的变量指针不能使用。给指针变量所赋的值与给其他变量所赋的值不同,给指针变量的赋值只能是地址,而不能是任何其他数据,否则将出错。
C语言中提供了地址运算符&来表示变量的地址,其一般形式为: & 变量名;给一个指针变量赋值有两种方法,
定义指针变量的同时就进行赋值 int a; int *p=&a;
先定义指针变量之后再赋值 int a; int *p; p=&a; //注意如果再定义完指针变量之后再赋值,就不需要加 *
指针变量的引用 *指针变量 其含义是引用指针变量所指向的值
& * 运算优先级别相同,自右而左结合
(3)指针自增自减,指向下一个存放变量地址的int *p; p++; 自增加4,按照指针数据类型,int 4个字节所以加4
以上是关于C语言学习日记3的主要内容,如果未能解决你的问题,请参考以下文章