[问题] 请教 C/C++ 程式方面的问题...++*p...

楼主: Joeng (痴情对谁不心伤)   2020-08-17 18:30:27
开发平台(Platform): (Ex: Win10, Linux, ...)
windows - ideone.com
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC !?
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
No
问题(Question):
想比对 ++*p, *p++, 以及*p之间的数值..但是若同时在printf印出
却发现顺序对调,值就不一致..
但是若只是单纯变量 (int i=5;) 却不会有此问题
喂入的资料(Input):
int a[] = {10, 20, 35};
int *p = a;
预期的正确结果(Expected Output):
*p 以及 ++*p 值应该要一样
错误结果(Wrong Output):
printf内顺序放错 就有不同结果
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
#include <stdio.h>
//后面标注为实际output
int main(void) {
int a[] = {10, 20, 35};
int *p = a;
int v;
int i = 5;
printf("i = %d, i++ = %d\n", i, i++); //6, 5
i = 5;
printf("i++ = %d, i = %d\n", i++, i); //5, 6
i = 5;
printf("i = %d, ++i = %d\n", i, ++i); //6, 6
i = 5;
printf("++i = %d, i = %d\n", ++i, i); //6, 6
//++*p
printf("*p = %d, ++*p = %d\n", *p, ++*p); //11, 11
printf("*p = %d\n", *p); //11
a[0]=10;
//p放在后面反而不是先+1之后的值
printf("++*p = %d, *p = %d\n", ++*p, *p); //11, 10
作者: james732 (好人超)   2020-08-17 18:33:00
看一下置底文的“C/C++ 语言新手十三诫”
楼主: Joeng (痴情对谁不心伤)   2020-08-17 18:36:00
了解, 多谢...我先去精华区找看看..文章没法删除..抱歉.
作者: nickchen1202 (Nickchen Nick)   2020-08-17 20:49:00
板规有说不得自删,所以留着比较好喔
作者: loveme00835 (发箍)   2020-08-17 21:48:00
你可能是运气比较不好 :'(
作者: kyfish (fish)   2020-08-30 16:32:00
会出错绝对是运气好 如果没发现错误而把未定义行为当规则才是运气不好
作者: jack82822005 (小郭郭)   2020-09-11 14:11:00
是第八诫吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com