一道C语言

有以下程序

#include

main()

{ char str[][20]={"H

ello","Beijing"},*p=str;

printf("%d\n",strlen(p+20));

}

程序运行后的输出结果是

A)0 B)5 C)7 D)20
请给出解题说明,从网上搜答案者谢绝

答案C

char str[][20]={"Hello","Beijing"}
这表示str是个二维数组,由两个一维数组构成,每个一维数组是20个字节构成。
*p=str
这表示p是指针,指向二维数组str的首地址
p+20
这表示由p指向的地址向后偏移20个字节,刚好指向了第二个一维数组“Beijing”了
strlen()
它是字符数组长函数,对“Beijing”求字符串长度,结果为7。

其中char *p=str;最好加强制转换,写成:char *p=(char*)str;
否则,有些编译器编译时通不过。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-04
选C
str是一个二维数组,而你定义的p是一个指向字符的指针,其实在这题中你用str给p初始化,编译器自动进行了类型转换。p初始化以后指向这个数组的首地址,在p+20进行运算时,由于p是指向字符的指针,所以该表达式结果为在p所指的地址基础上增加20个字符所占的空间,因为数组是一个2行20列的数组p刚开始指向str[0][0],加了20以后就会指向
str[1][0],而该地址是"Beijing"的首地址,所以strlen求值时求的是第二个字符串的长度为7.
第2个回答  2008-04-04
#include

main()

{ char str[][20]={"H

ello","Beijing"},*p=str;

printf("%d\n",strlen(p+20));

}
答案:5
strlen()是字符数组长函数,只计算不包括'\0'
*p=str 等同于*p=&str[0][0] 从一行一列开始就是H
Hello
Beijing
看懂了吧
第3个回答  2008-04-04
你想问的是什么问题?
-------------------
答案C
*p是指向字符串str的指针,而str是20字节每组,那么p是指向str的第一个字符串,p+20就是指向下一字符串-Beijing,所以答案C,有不明白的可以补充!
第4个回答  2008-04-04
程序本身就有问题,严格来说,你都不可能通过编译,何来的结果.

不过按照题目的思路来看,应该是C
相似回答