请教各位,有几道题一直理解不了。。

Regnaiq 2016-03-14 07:31:39


莫非是答案有问题?

另外,宏定义中,#define P(a,b) strcpy(a,b) 这样可以吗?
请各位指点~
...全文
120 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Regnaiq 2016-03-14
  • 打赏
  • 举报
回复
引用 4 楼 qq423399099 的回复:
[quote=引用 3 楼 yq_forever 的回复:] [quote=引用 2 楼 qq423399099 的回复:] 一个个说,先说第一个,一维数组名+1,其实就是指针移到下一个数组元素之前,而在内存中移动的字节数会隐式 转换成str + 1 * sizeof( char)会在内存中移动1个字节,所以str+1移动到了数组的第二个字符之前,指向了第二个字符'B' //这里以LZ给的数组为例啊,如果是int的数组,就要sizeof(int) ,一次+1移动4个字节 第二个问题,LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断,也不满足第二个if判断,所以执行了else中的y+=y 得到了y=20,所以选A 第三个问题,#define P(a,b) strcpy(a,b)可以这样用的,但感觉并没有什么用
谢谢解答~ 第一个问题中,str+1也就是p指向了B,那么*(p+1)不就向后再移一位,指向'\0'了? 第三个问题,刚写了个程序验证了一下,好像不合法[/quote] 我脑残了,原来“AB”前面有一个空格,那么str+1也就是p指向了第二个字符也就是A,所以*(p+1)就向后再移一位指向B 那个宏定义我这里可以的,LZ要么贴一下自己的代码和错误 [/quote] 原来有个空格!!我擦这什么题啊。。 是有一道选择题,这个宏是错误选项,可能是题目不严谨吧。。又试了一下,我程序刚忘了加<string.h>头文件了哈哈,总犯这种低级错误。。 非常感谢你的回答,谢谢啦
小灸舞 版主 2016-03-14
  • 打赏
  • 举报
回复
引用 3 楼 yq_forever 的回复:
[quote=引用 2 楼 qq423399099 的回复:]
一个个说,先说第一个,一维数组名+1,其实就是指针移到下一个数组元素之前,而在内存中移动的字节数会隐式
转换成str + 1 * sizeof( char)会在内存中移动1个字节,所以str+1移动到了数组的第二个字符之前,指向了第二个字符'B'
//这里以LZ给的数组为例啊,如果是int的数组,就要sizeof(int) ,一次+1移动4个字节
第二个问题,LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断,也不满足第二个if判断,所以执行了else中的y+=y
得到了y=20,所以选A
第三个问题,#define P(a,b) strcpy(a,b)可以这样用的,但感觉并没有什么用



谢谢解答~
第一个问题中,str+1也就是p指向了B,那么*(p+1)不就向后再移一位,指向'\0'了?
第三个问题,刚写了个程序验证了一下,好像不合法[/quote]
我脑残了,原来“AB”前面有一个空格,那么str+1也就是p指向了第二个字符也就是A,所以*(p+1)就向后再移一位指向B
那个宏定义我这里可以的,LZ要么贴一下自己的代码和错误
Regnaiq 2016-03-14
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
一个个说,先说第一个,一维数组名+1,其实就是指针移到下一个数组元素之前,而在内存中移动的字节数会隐式 转换成str + 1 * sizeof( char)会在内存中移动1个字节,所以str+1移动到了数组的第二个字符之前,指向了第二个字符'B' //这里以LZ给的数组为例啊,如果是int的数组,就要sizeof(int) ,一次+1移动4个字节 第二个问题,LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断,也不满足第二个if判断,所以执行了else中的y+=y 得到了y=20,所以选A 第三个问题,#define P(a,b) strcpy(a,b)可以这样用的,但感觉并没有什么用
谢谢解答~ 第一个问题中,str+1也就是p指向了B,那么*(p+1)不就向后再移一位,指向'\0'了? 第三个问题,刚写了个程序验证了一下,好像不合法
小灸舞 版主 2016-03-14
  • 打赏
  • 举报
回复
一个个说,先说第一个,一维数组名+1,其实就是指针移到下一个数组元素之前,而在内存中移动的字节数会隐式
转换成str + 1 * sizeof( char)会在内存中移动1个字节,所以str+1移动到了数组的第二个字符之前,指向了第二个字符'B'
//这里以LZ给的数组为例啊,如果是int的数组,就要sizeof(int) ,一次+1移动4个字节
第二个问题,LZ要看清啊第一个if中是a=0而不是a==0,所以不会进第一个if判断,也不满足第二个if判断,所以执行了else中的y+=y
得到了y=20,所以选A
第三个问题,#define P(a,b) strcpy(a,b)可以这样用的,但感觉并没有什么用
Regnaiq 2016-03-14
  • 打赏
  • 举报
回复
呃 图片变态了一点,请别介意。。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧