z=(x+1)++-y,x+1运算结果作为
常量
保存在
暂存器
中,无法进行自增运算
14.
二维数组
在
内存
中其实是
一维数组
,比如int
a[3][3],然后a[0][0]就是第0个元素,a[2][2]就是第2*3+2=8个元素,而p只是一个int*,
编译器
压根就不知道p[i][i]应该是第i*1+i还是i*2+i或者i*n+i个元素,所以只能用p[i]一维数组的形式。
*p=a这里其实是int
*p
=
a相当于int
*p,
p
=
a在vs2010是直接报错的。
p++,p是int*类型,++就是移动一个int。
2.char只有8位,去掉一个符号位就剩下7位了,没法表示出130
7.数组并不以'\0'结束,但是字符串是以'\0'结束,所以要
占个位置
5.数组'\0'算长度,字符串'\0'不算长度。
第一题:float是分配4个单元的内存,double是分配8个单元的内存,需要从取值范围的角度来考虑(我忘了范围,你可以那本C语言的书看看),还有就是%f 对应的是float,%lf 对应的是double第二题:nr=nr*10+n%10说的是将输入的数据(n)取其个位数 n/=10说的是去掉n的个位
如:第一次执行nr=nr*10+n%10后nr=0*10+4=4 执行n/=10后n=123
第二次执行nr=nr*10+n%10后nr=4*10+3=43 执行n/=10后n=12
第三次执行nr=nr*10+n%10后nr=43*10+2=432 执行n/=10后n=1
第四次执行nr=nr*10+n%10后nr=432*10+1=4321 执行n/=10后n=0(停止循环,输出4321)
这排版乱的 - -第一题 如果a=0 那么a++ 如果x<y 那么++b否则把b的值改为2倍x 所以a=1 b=2
第二题 a从1到100做循环 每次循环+1 如果b超过20了 那么跳出循环 每逢b=(1,4,7,10,13,16,19,22.....)b加3
所以 b输出来应该是22 做了8次循环 所以a=8 b=22,
第三题没啥好说的 就是5个*
第四题定义了一个求最大值的函数 我先抢个最快回答再说...