b[i++]a[i++]这形式的赋值可以吗?C/C++ code#includestdio.hvoid main(){int i0char a[5]{a,b,
b[i++]=a[i++]这形式的赋值可以吗?
C/C++ code#include<stdio.h>void main(){ int i=0; char a[5]={'a','b','c','d','e'}; char b[5]; while(a[i]!='\0') { b[i++]=a[i++]; printf("%c\n",b[i]); }}
C/C++ code#include<stdio.h>void main(){ int i=0; char *p="Hello woeld!"; char a[19]; char *q=a; while(*p!='\0') { *q++=*p++; }; while(a[i]!='\0') { printf("%c",a[i++]); }; printf("\n");}
C/C++ code#include<stdio.h>void main(){ int i=0; char *p="Hello woeld!"; char a[19]; char *q=a,*p1=p; while(*p!='\0') { *q++=*p1++; }; while(a[i]!='\0') { printf("%c",a[i++]); }; printf("\n");}
1,2的结果是错的,3是对的,总的说来我就想用一种i++=j++的这种形式,觉得这样的连续赋值比较好。
想问一下 1,2这种形式错在什么地方,一般的像这种要把b数组的元素复制到a的形式都是用第三种方法的吗,
[解决办法]坚决不要用这种写法,不同的机器执行这条语句的效果可能会不同的
[解决办法]最好不用这种方法,这个会因编译器的不同,产生不同的结果
[解决办法]第一种方法中
b[i++]=a[i++];
一个表达式里面i变了两次,但c没有规定这两次变化的顺序,结果是未定义的。
第二种方法
while(*p!='\0')
{
*q++=*p++;
};
当p指向最后那个'\0'的时候,循环体没执行。也就是最后那个'\0'没有复制过去。可以在循环结束后再加一条
*q = '\0'。
或者用更简洁的方法
while(*q++=*p++)
;
注意有个分号。
第三个循环
while(*p!='\0')
{
*q++=*p1++;
};
答案是正确的,但有一点,退出循环的条件是*p!='\0',但循环过程中没有改变过p的值,只改变了q和p1。
[解决办法]不要写自己都搞不清楚的代码,有些即便你测试时正确的,但是可能仅仅是你当前编译器正确,应该保证自己所写的代码含义明确。
[解决办法]#include<stdio.h>
void main()
{
int i=0,j=0;
char a[5]={'a','b','c','d','e'};
char b[5];
while(a[i]!='\0')
{
b[i++]=a[j++];
printf("%c\n",b[i]);
}
}
3#楼,,这样修改怎么还不能输出结果啊,,
[解决办法]3#楼,,问问你个问题。。。上面第三那种方法,,
while(*p!='\0')
{
*q++=*p1++;
};
这种情况下,,p1中的字母复制过来,,,同样q的结尾没有\0啊,,为什么能运行处正确的结果呢
[解决办法][解决办法]百度: 未定义行为
表达式求值
[解决办法][解决办法][解决办法][解决办法]1、a是字符数组而不是字符串数组,所以不能用循环条件 a[i]!='\0'
b[i++]=a[i++]; 不同的机器执行这条语句的效果可能会不同的, 但无论如何b[i]都将会是打印第i+2个元素,将是不可预料的值
2、赋值循环实际上空字符并没赋值到数组中,所以打印循环条件a[i]!='\0'有误
3、实际上也是错的,while(*p!='\0') 理论上是无限循环,因为并没改变条件值的语句,实际运行可能会不可预料
[解决办法]不要在同一个语句中写两次或以上的i++(或者++i或者i--或者--i),否则结果随编译器的不同而不同。
[解决办法]个人认为这个表达式不会有未定义行为!很确定确定,而且可以移植!
它等价于
*q++ = *p++;
这样的指针操作!
[解决办法] while(*p!='\0')
{
*q++=*p1++;
};
这是一个死循环,,因为p的值没有改变,,,无法跳出循环啊,,,3#回答一下
[解决办法][解决办法][解决办法]对初学者来说,最好把++,--单独一行写(for循环除外)
如果你觉得你已经清楚了前++后++的区别,可以不单独写,但要记住一个原则,i++的同一语句不能在出现变量i