c语言基本常识4
数组未初始化时情况
1、未初始化,同时数组中的某些元素未被赋值时,其值有两种可能,一种是全局数组,被编译器初始化为0,一种是局部数组,为随机数。在vc6.0的debug版程序中一般是0xcc的值。这个值实际上是int 3断点机器码。
2、已初始化,不管是局部数组还是全局数组,编译器都会将其未被赋值的元素初始化为0。
运算符
+ - * % /
%只能是整数,可以取负,除数不能为0
/可以为分数,除数不能是0
二元复合运算符 +=,-=,*=,/=,<<=,>>=,&=,^=,|=,
&=:都是1才为1,3的二进制是11,7的二进制是111,按位与的结果为3
^=:同为0或者同为1时,对应位结果为0;否则为1。
|=是按位或操作,就是只要有一个1就是1,两个都是0才是0
注:Sizeof不是一个函数,是一个操作符。
误区:
||当第一个表达式成立,则后边的语句不执行
三目运算符:
a> b?x:y
如果a>b,为true,返回x的值,否则为false,返回y的值。
显隐式转换
int b=3; float c=(float)b; //显示转换
float a=2.00; int d=a; //隐式转换
控制流:
if-else if- elseif-elseif-…….-else;
Switch
For
如何打断点(vc++6.0)
Window+F11, F10继续执行下一个,F5结束.
for循环
break和continue
break是跳出整个循环,
continue是跳出本次循环,继续执行下一轮循环
函数
两种函数定义:1.函数未声明,但函数(实现)必须放在主函数上边(函数必须在调用之前)
2.函数有声明,声明必须在函数调用之前,函数可以放在主函数后边
形参和实参
函数声明可以没有形参变量名,但一定要有类型
例如: int add(int ,int );//函数声明(函数头部+分号)
函数实现形参名和类型都不能省略。
int add(intx,int y)//函数实现(函数头部+函数体)
注: sum=add(a--,++b);//int x=a;int y=b;这个是一个赋值语句,所以是从右向左运算
函数传参
1. 传参
2. 传地址(指针)
3. 传引用
参数以传值的形式传递,形参的改变不会影响实参,因为形参和实参使用的不同地址空间。
指针:(占4个字节,保存的地址是正整数)
指针是一个变量,它的内存保存着另一个变量的地址
当一个变量的指针等于另一个变量的地址时,那么这个指针指向这么变量
%p是十六进制的数
指针与赋值的变量类型要相同(声明的指针类型与所指向变量的类型保持一致指针)
int a=2; int *p=&a;√ char *p=&a;
多个指针可以同时指向同一个变量的地址
通过指针变量访问它所指向的变量 *代表解地址
int a=5;int*p=&a;
printf(“%d\n”,*p);
指针解地址赋值,那么这个指针指向的变量值也会发生变化.
野指针
未被初始化的指针称为野指针
int *p;
当使用这个野指针时,
即使程序运⾏没有问题,那也是非常危险的,因为这个”野指针”指向的内存空间,可能是某个重要的数据或其它程序,甚⾄是系统的重要内存位置,这样造成的危害是不可预知的,这个不可预知包括危害程度的不可预知和危害时间的不可预知的,像⼀颗不知何时会爆的定时炸弹.空指针。
创建的同时初始化
int *p=NULL;
空指针是指向为NULL,它的值是0x0,即0号地址单元,永远不要试图去访问空指针
指向的内容,因为它是系统内存单元,不允许用户级别的程序去访问(用户级别不允许访问系统级别的),即对空指针解引用是非法的,会造成 segmentation fault (段错误)如果空指针再赋值一个地址就可以用。
注:空指针和野指针不能解引用。
传地址例题:
指针作为函数的参数,参数传递的传指针方式,形参改变 可能 影响实参