c语言基本运算符问题 *a++ = *b++
a+=b等价于a=a+b,其余的类似
//又是oj上的题目?#includeint main(){int a,b;while(scanf("%d %d",&a,&b)!=EOF){//EOF代表文件结尾,测试时通过文件输入数据//当输入到文件尾部时停止处理//当在控制台输入时按Ctrl+Z代表文件末尾printf("%d
",a+b);}return 0;}
*a++=*b++;这里,++与* 号的优先级都比等号高,等他们都执行完,9=6,是这个东西,这是什么意思?
注意:++与*是同一级运算符,结合方向有运算方向决定,不是你讲的++优先*号,
呵呵,想来是这里的问题。你看图片,比较哈就知道了。
高手指教,相互学习。
因为这是后置运算。如果你不弄明白前置元算与后置运算的区别,这类问题都容易出错。
前置运算:
举例:
++a=++b;
执行顺序是:
a=a+1;
b=b+1;
a=b;
后置运算:
举例:
a++=b++;
a=b;
a=a+1;
b=b+1;
再回到你上面的问题:
*a++=*b++;
执行顺序是:
*a;
*b;
*a=*b;
a++;
b++;
最后输出的就是a[1],b[1],明白了没有?
*a++ = *b++,从中可以看出,首先把*b所指向的值赋值给*a,就是asd[2]中的2把res[2]中的5给覆盖了;其次就是*a和*b再来执行"++"这个运算符,并指向下一个数组元素并且输出9,6。
* 和++的优先级是一样高的,但是它们的运算方向是从右到左!!!
*a++就是等于*(a++) 但此时要是输出*a++,会输出的值等于*a,然后再把指针变量会指向下一个数据
楼主所预测的结果为6,6是不对的,*a++=*b++ *b只会给*a赋值一次,就是把*b所指向的值赋值给*a所指向的值;然后通过“++”指针会指向下一个数组元素,但绝不会再给*a赋值;楼主所预测的结果为6,6,实际上楼主是指针指向下一个数组元素,并且给*a 的值覆盖了;
*a++=*b++的分解步骤
1 *a=*b; // res[2]={2,9};
2 b=b+1; //b指向6的地址
3 a=a+1; //a指向9的地址
所以 *a=9,*b=6
*号和++是单目运算符,优先级相同,但是结合方向是从右至左。就是把*号右面的看成一个整体,
也就是*(a++)=*(b++); 因为++在后,所以最后做增1,先做*(a)=*(b), 然后b++, a++;
*a++=*b++;
的确是相当于
*(a++)=*(b++);
由于++在后
所以
又相当于
*a=*b;
a++;
b++;
所以
运行后
第一句
*a=*b;
则相当于
res[0]=asd[0]=2,那么此时res数组就成了int res[2]={2,9};
a++ ----------a指向res[1]
b++ ----------b指向asd[1]
所以
*a=res[1]=9
*b=asd[1]=6
c语言基本运算符问题 *a++ = *b++
a++=*b++;这里,++与* 号的优先级都比等号高,等他们都执行完,9=6,是这个东西,这是什么意思?注意:++与*是同一级运算符,结合方向有运算方向决定,不是你讲的++优先*号,呵呵,想来是这里的问题。你看图片,比较哈就知道了。高手指教,相互学习。
c语言*a++=*b什么意思,具体怎么运行的
a也是指针,它的值是个地址,即它所指向变量的地址,a++即a+1,这里并不是地址值加一,而是加一个单位,这里的单位是它所指向的变量的大小。a++是使用完a后使其加1.所以整个表达式的值是:把指针b指向的变量的值给指针a(另一种说法是让指针a指向b所指向的变量),然后让指针a的地址值+1(个...
*a++=*b++在C语言里怎么解释?要回答里有用优先级比较的原因
int a[5]={1,2,3,4,5,};int *pa=&a[2]; \/*指针pa指向了元素a[2]*\/ int b[5];int *pb=b; \/*指针pb指向了元素b[0]*\/ int y;那么,单独执行以下各条语句的作用是:y=*pa++; \/*把a[2]的值赋给y后,pa的值指向了a[3]*\/ y=*(pa++); \/*同上*\/ y=(...
关于C语言三目运算符的一个问题
逗号表达式的优先级在C语言中最低,甚至低于三目运算符。这意味着你的表达式实际上是(*a!=',' ? i++, a++: a++), i++;最后那个i++并不是三目运算符的一部分,它无论如何都会被执行。你应该加上括号:*a!=',' ? (i++,a++) : (a++,i++);...
while(*a++=*b++) 错误问题
{ while (*dest++ = *str++) ;} 不用担心字符串结尾的'\\0', 字符'\\0'的值为0, 当拷贝完最后一个字符时, while中判断的表达式值为0, 自动跳出循环.因为你对指针使用了++运算符, 指针递增, 因此该指针不能为const 指针, 也就是指针的声明应该为char *src;而不应该是char * const str;...
*p++=*a++在C语言中如何运行的
1. 取指针a所指变量内容,将其赋值给指针p所指变量。即*p = *a;2. a++ 3. p++
C++上的一些运算符顺序的问题:我是C++初学者,对运算符顺序不是很了解...
a=1; a是左值,1是右值 赋值运算符的左边必须是变量,而不是值。(++a)=1; 是会报错的。④你有两种方法完全掌握C++的运算符问题:1.必要性逻辑:C++是一门几乎理论上完美的语言,创造它的人是理论和实践的顶级牛人,那么,所有运算符的逻辑顺序必须是往最合理的那个方向去思考:怎样才最符合...
C语言问题 int a=3,求a++*a 要解释过程!
a++*a 值为9 ++运算符比 *(乘号)优先级高 相当于(a++)*a a++的值为 3(你不要误以为下一个a的值会变为4, 一般情况下有后++的, 当这条语句完成后其值才会改变, 更编译器有一定关系)故结果为9
C语言的一道题,这个‘++==’是什么意思? 答案解析说“先判断条件1:a=...
++==不是一个运算符,而是++和==两个运算符 比如a++==b是先判断a==b,然后a=a+1,这个表达式的值就是a==b的值,0或者1
C语言a=1,++a*++a=?
答案为9 因为++操作符优先级大于*,先进行两个++运算,在进行*运算 等价于如下式子:++a; \/\/a=2 ++a; \/\/a=3 a*a; \/\/3*3=9