麻烦回答以下几道题 执行下列程序段后,*p的值是char *p="asdf";printf("%c",*(p+strle

问题描述:

麻烦回答以下几道题
执行下列程序段后,*p的值是
char *p="asdf";
printf("%c",*(p+strlen(p)));
(p+strlen(p)是什么意思 strlen不是测试字符串长度么
有以下程序
#include
main()
{char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
程序运行后的结果是_______
怎么算的?
分别用十进制表示整形常量-ox1f为
答案是-31 怎么算的?
以下由for语句构成的循环执行了______次
#include
#difine N 2
#difine M N+1
#difine NUM(M+1)*N/2
main()
{int i,n=o;
for(i=1;i
1个回答 分类:综合 2014-10-23

问题解答:

我来补答
执行下列程序段后,*p的值是
char *p="asdf";
printf("%c",*(p+strlen(p)));
答案是a
(p+strlen(p)是什么意思 strlen不是测试字符串长度么 答案为什么是a啊?
答案是错误的,应该显示空格.
strlen(p)是返回字符串有效字符长度,所以应该为4,而非5
p为字符串指针,其值为字符串内存地址首地址,即指向'a';
p + strlen(p)会对指针p加上偏移量strlen(p),即p + 4*sizeof(char),这时指向"asdf"后面一个字符,这个字符应为系统添加的那个字符串结束符'/0',屏幕显示应该为空格.
有以下程序
#include
main()
{char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
程序运行后的结果是_______
答案是15 怎么算的?
答案应该为15,
p=s; // 首先字符串指针p指向字符串数组s首地址,即'1'
printf("%c",*p++); // 由于是后置++,此时p的值仍然为s首地址,
// 所以*解引用指针p,输出字符串第一个字符'1'
printf("%c",*p++); // 现在p的值已经增加了1*sizeof(char)了,同理是后置++
// 所以输出第二个字符'5',此函数运行完后,p的值再增加1*sizeof(char)
分别用十进制表示整形常量-ox1f为
答案是-31 怎么算的?
-0x1f为16进制常量-1f(注意前面的0x表示16进制),转换为10进制:
-(1*16 + 15) = -31
以下由for语句构成的循环执行了______次
#include
#difine N 2 // 定义宏常量N为2
#difine M N+1 // 定义宏M 为 N+1,即为3
#difine NUM(M+1)*N/2 //定义宏NUM 为(M+1)*N/2,即为4
main()
{int i,n=o;
for(i=1;i
 
 
展开全文阅读
剩余:2000
上一页:合外力做功,