c语言相关知识疑惑解答

29if语句形式为什么不正确?
9为什么答案是D
另外局部变量没有指定初值的时候不是自动赋值为0吗 为什么答案是初值不确定

img


img

先回答后面2个问题吧
第9题,*p只定义了指针,但是没有给指针分配内存,也没有指向已有的变量,所以它是个典型的野指针
给野指针指向的内存直接赋值,可能造成程序崩溃
第3问,如果是c++,会自动给变量初始化,如果是c语言,不会给变量自动初始化,但是会分配内存,那么分配的内存是随机的,里面存的值当然也是随机的
第1问,ABC其实都是合法的语法,但是其实只有C是个正确的用法
首先排除D,y++没有写分号,编译会报错
A选项,if后面直接跟分号,什么都不做,那么等于白写,不管进不进if都一样
B选项,=是赋值,那么会将y先赋值给x,只要x大于0就会进入if内,这在c语言里是合法的用法

img


这个x=y是赋值操作,比较的话要写成x==y
9:因为没有对函数的传入参数进行判断,传入参数存在空指针的可能
局部变量未指定初始值(未初始化)时的值是随机的(原本这块内存中的值),并不是0

29题的B应该要修改x==y而不是赋值;
9题是将p1和p2两个指针指向的地址进行互换