C语言的一道题,答案出乎很多人的意料,来挑战一下吧,求C语言高手,解释

2021-04-02 12:47:33 字数 2882 阅读 9815

1楼:沧海雄风

的确出乎意料编译不过

char*p=sz_test;

'initializing':cannotconvertfrom'structt_test[10]'to'char*'

我改好了

003 木有问题

2楼:匿名用户

对于char *p = sz_test

这一操作,部分编译器会报warning, 设置严格的编译器会报error

p-sz_test这一操作,大多数编译器都会报error

因为sz_test是struct t_test*型的,不同类型指针相减,编译器会无法确定怎样做操作

所以比较标准的做法是

char *p = (char *)sz_test

p-(char *)sz_test

如果这样做的话,那么对于p是char *型的,那么p在自加三次后,每次都是地址加1,如果把sz_test也转为char *型的话,那么,p-(char *)sz_test自然就是3,输出也就是003

但是如果这样做

(struct t_test*)p-sz_test

效果就不一样了

结果取决于sizeof(struct t_test) 也就是说和编译器相关了

对于当下最流行的32位机及默认的对齐方式sizeof(struct t_test)为8

而p和sz_test之间的地址差为3,不够一个sizeof,那么结果就是0,输出000

如果是16位机,同时设定为字节对齐,即sizeof(struct t_test)为3的情况下,那么地址差恰好为一个sizeof大小,这时结果是1,输出为001

不过最后一种情况比较难产生,毕竟需要设定对齐方式,还得是古老的16位机编译器,不太好找了

所以要验证这一说法,可以改三个p++为一个p+=8;

然后分别输出

p-(char *)sz_test

(struct t_test*)p-sz_test

看结果 将分别是008 和001

总之,不同类型指针默认无法相减,要减先转换,让系统知道你要以哪个指针类型的长度做基准才可以

3楼:匿名用户

003#include

structt_test

;structt_testsz_test[10];

intmain(intargc,char*argv)

4楼:匿名用户

跟编译器和初始化有关,有的编译器会自动帮你初始化。有的不会。总的来说无法确定

5楼:匿名用户

感觉是003,对于指针不是特别擅长

6楼:畅所欲言呀

sz_test[10];这个结构体数组都没初始化,结果就是无法预料的

关于c语言的一道题,求c高手帮忙解答~谢谢啦

7楼:踽踽独行

8这是递归调用函数!

函数返回值通过指针s返回!

6开始,函数返回值为

f(6,*)=f(5,*)+f(4,*)

f(5,*)=f(4,*)+f(3,*)

f(4,*)=f(3,*)+f(2,*)

f(3,*)=f(2,*)+f(1,*)

f(2,*)=1;这时候返回,不回再继续

答f(1,*)=1;这时候返回,不再继续

f(6,*)=5*f(2,*)+3*f(1,*)=5+3=8错误之处://应为||

判断了==1,==2,如果刚开始n是0或负值那么函数永远不会返回类似于死循环!

8楼:陈宗权

这个程序copy

实际是在计算斐波那契数列:

1,1,2,3,5,8,13,21,……

算法:第1第2两项是1,以后每一项是前两项之和。

fun(int n, int* s)就是计算斐波那契数列第n项的值保存在地址为s的变量中。

所以fun(6,&x)是计算第6项的值(也就是8)保存在x中。

而fun(n-1,&f1)是计算第n-1项的值保存在f1中,fun(n-2,&f2)是计算第n-2项的值保存在f2中。

9楼:匿名用户

您好,看c程序。首先看主函数,我们一步步来开:

1,定义整形变量x,,以x的地址为专参数。调用函数fun ,我们属就带着x来看fun

2,再fun函数内 fun(int n,int *s),,,当我们调用的时候,这个时候n=6,s是x的地址。

3,运行fun函数,首先这个if不执行。执行else,即fun(5,&f1)...

就这样一步步运行。。谢谢!

c语言一道题,第49题为什么选d啊,恳求会的人帮我下吧。

10楼:匿名用户

printf语句中,连续两个%(“%%”)代表转义字符输出‘%’。

所以输出的结果是d。

有一道c语言程序设计的题,老师留的作业,有没有c语言高手帮忙解决一下,设计一个程序。

11楼:匿名用户

#include

int main()

for (i=0;i<2;i++)

for (i=1;i<11;i++)//统计人数return 0;

}帮你解决了! 你也太抠门了哈,一分都不给!

呵呵,我乐于助人!帮你了!

急求答案!!!!求高手帮忙做一下这套c语言的模拟题!!!!!!

12楼:闽盼愚菁菁

判断题答案:错错错错对错对对对错对错对错错错错错对对,我手机啊!先把你的选择题做完。

一道c语言题,求高手解释下这题,一道C语言题

1楼 樣小樣 我把行分好点,直观点 总的目的就是找出50 60中的质数 素数 include stdio h main 输出j k 用来控制转行 如还有其他不明,可继续提问。 2楼 百度用户 include stdio h main 3楼 匿名用户 找素数的程序 ,只是其中的好几句语句没有用 4楼 ...

一道c语言的题目,求大神解答,一道C语言的题目,求大神解答。 5

1楼 云中鹤隐 while scanf d n 是什么 2楼 心河星尘 你忘记将每次循环前将sum清零了。还有格式等等问题。改法是 include int main sum 0 for b 0 b printf 2f n sum n return 0 3楼 匿名用户 include int main...

求解释、一道简单的C语言题目,一道简单的c语言题目,求代码

1楼 流云的歌 我总共做了三个测试。 只有x 0 0 或 null 时,没有给后面的x 1 x 2 赋值时结果是7 0,说明这个字符串是空串。所以是0 当只有x 1 0 时,显示7 1 第三个测试是测试strlen 这个我不用说了。 2楼 小囚love腊肉 x 0 0 x 1 0 这两句赋的值一样,...