一个很简单的问题,但是我不懂,求问

约翰尼 2010-05-21 01:42:34
请大家看:
char c;
str:是一个字符串指针。
下面代码:
for(; (c = *str); str++)
{
……;//中间没有break语句,也没有return语句。
}

请问上面是个死循环吗?

答案:不是,最后,当*str为NULL时,就跳出循环了,请问,为什么?
赋值语句不是一直返回TRUE的吗?
...全文
118 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
约翰尼 2010-05-21
  • 打赏
  • 举报
回复
8楼正解,很多人正解,谢谢大家!
fzmlovefgh 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yzx714 的回复:]
引用 4 楼 crab_emb 的回复:

不是所有的赋值语句,返回值都为1吗?
赋值语句的值为所赋的值
[/Quote]

就是这样的
liutengfeigo 2010-05-21
  • 打赏
  • 举报
回复
楼主看看这个吧,
#include <iostream>
using namespace std;
int main(void)
{ char a[] = "dasd2 asdffa";
char b[sizeof(a)];
for (int i = 0; *(b+i) = *(a+i);++i);
cout << b << endl;
system("pause");
return 0;
}
csu_PHANTOM 2010-05-21
  • 打赏
  • 举报
回复
6楼正解 我说详细些
第一 if()判定是布尔型的
第二 a=b 这个赋值语句的值就是a的值
所以在str++情况下 最终会递加到字符串最后的'/n' 即0值
所以此时赋值语句c=str 即使得c=0
所以为逻辑假
退出循环
我也才学 呵呵 一起加油- -
lbjfeng 2010-05-21
  • 打赏
  • 举报
回复
楼上们都说了……
sichuanwww 2010-05-21
  • 打赏
  • 举报
回复
0为假,非0为真
Arkwyd 2010-05-21
  • 打赏
  • 举报
回复
不要乱猜,仔细看6楼的话。

试想:
a=b=3;
a=(b=3);
以上两句等价,结果是a和b的值都是3。如果(b=3)的值不是3,那么a的值又怎么能是3呢?
swuxd 2010-05-21
  • 打赏
  • 举报
回复
赋值语句没有返回值这一说吧
赋值语句这个表达式的值就是 左值的值吧

int a,b,c;
c = 10;
b = 5;

a = c; //赋值表达式的值为10
a = b; //赋值表达式的值为5
z569362161 2010-05-21
  • 打赏
  • 举报
回复
for(; (c = *str); str++)

默认为for(; ((c = *str)!='\0'); str++)

就是到\0循环结束。\0就是NULL。可以将!='\0'省略。就是上面的形式。

你在把他们比较一下。在程序中。
cao_julians 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 crab_emb 的回复:]
我想,应该不是说,C赋值为什么,赋值语句就返回什么吧。
我想知道,是否是这样的,下面是我猜想的,请大家看对不对:
在C标准里,赋值语句都返回1,而当赋值语句右值为0时,返回0。
[/Quote]
==========================
赋值表达式的值,就是=后表达式的值赋值给=左部变量所生成的值(注意可能有隐式的类型转换发生),
int y;
y=123.4*2;/*y的值是246,赋值表达式的值就是246*/
约翰尼 2010-05-21
  • 打赏
  • 举报
回复
我想,应该不是说,C赋值为什么,赋值语句就返回什么吧。
我想知道,是否是这样的,下面是我猜想的,请大家看对不对:
在C标准里,赋值语句都返回1,而当赋值语句右值为0时,返回0。
yzx714 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crab_emb 的回复:]

不是所有的赋值语句,返回值都为1吗?
[/Quote]赋值语句的值为所赋的值
cao_julians 2010-05-21
  • 打赏
  • 举报
回复
NULL的机内编码就是0,c=0是赋值表达式,值就是0,在逻辑表达式(for()中第二个表达式就是逻辑表达式)处0表示FALSE,循环结束。
约翰尼 2010-05-21
  • 打赏
  • 举报
回复
不是所有的赋值语句,返回值都为1吗?
dinjay 2010-05-21
  • 打赏
  • 举报
回复
if (c=0)
{
//...
}
这里的if循环永远都进不去的
dinjay 2010-05-21
  • 打赏
  • 举报
回复
*str为NULL时
c就为空了,相当于for(; null; str++),你说会不会跳出来呢?
selooloo 2010-05-21
  • 打赏
  • 举报
回复
*str为NULL时,表达式(c = *str)的值就为0,也就是false,跳出循环

69,369

社区成员

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

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