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 ”,*p);

指针解地址赋值,那么这个指针指向的变量值也会发生变化.

野指针

未被初始化的指针称为野指针

int *p;

当使用这个野指针时,

即使程序运⾏没有问题,那也是非常危险的,因为这个”野指针”指向的内存空间,可能是某个重要的数据或其它程序,甚⾄是系统的重要内存位置,这样造成的危害是不可预知的,这个不可预知包括危害程度的不可预知和危害时间的不可预知的,像⼀颗不知何时会爆的定时炸弹.空指针。

创建的同时初始化

int *p=NULL;

空指针是指向为NULL,它的值是0x0,即0号地址单元,永远不要试图去访问空指针

指向的内容,因为它是系统内存单元,不允许用户级别的程序去访问(用户级别不允许访问系统级别的),即对空指针解引用是非法的,会造成 segmentation fault (段错误)如果空指针再赋值一个地址就可以用。

注:空指针和野指针不能解引用。

传地址例题:

指针作为函数的参数,参数传递的传指针方式,形参改变  可能  影响实参
原文地址:https://www.cnblogs.com/shuaigezhaoguang/p/5847249.html