c语言问题,各位大佬帮帮忙哦,谢谢了

#include<stdio.h>
int main()
{
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
return 0;
}
答案是:
9,8,8,9,-8,-9

#include<stdio.h>
int main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
return 0;
}
答案是:
8,7,8,8,-8,-8
两个就是结构不一样,为什么答案也不一样呢?

这个问题其实很简单,c语言默认采用_cdecl的函数调用方式,这种方式规定参数从右往左入栈,即第二段代码中

printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);

参数入栈顺序依次是:

-i--;
-i++;
i--;
i++;
--i;
++i;

与_cdecl相对应的是__stdcall,参数从左往右入栈.还有一些其他的调用方式就不一一列举了.

追问

对了,有一个疑问,是不是第一个的i值一直是变化的;
第二个的i值一直不变,在i=8的情况下进行操作

追答

第二个的i值也是在变的,前加加和前减减都要变,后++/--不变.

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-02-16
噩噩浑浑额好的哦等会电话都不几点回的会的呵呵

C语言题目,求大佬解答
答案B

求助大佬,初学c语言出现的问题
内部for循环的终止条件应该是j<size-i-1;换句话说你的排序程序数组越界了,把数组后面的一个数也一块排序了,而这个数在内存中正是size的值11,而且C语言是不检查数组越界的,所以排序后size的值的成了43,因为size参加了排序,11被排到前面去了,最大数43被排到最后,也就是size变量在内存的位置,所以...

C语言问题,求大佬解答
【示例代码如下,用 中文c 编译】定义 最大输入个数 10000 整数类型 甲,个数=0, 输入数[最大输入个数],统计=0;小数类型 和=0,平均值;重复{ 图形输入整数() => 甲;如果( 甲 大于 0 ){ 和 += 甲;如果(个数 < 最大输入个数) 输入数[个数 ++] = 甲;} }直到 甲 等...

一个C语言问题,求大佬解答?
以下是实现上述功能的 C 程序示例:include <stdio.h> include <string.h> define MAX_LEN 80 \/\/ 字符串最大长度 int main(int argc, char *argv[]){ if (argc < 2) { printf("Please specify a file name.\\n");return 1;} \/\/ 从命令行得到文件名 char *file_name = argv[1];\/...

一个C语言指针问题。求大佬解答?
在这个程序中,我们首先提示用户输入方阵的尺寸,然后输入方阵的元素。接着,我们通过遍历方阵的每一行,并使用指针指向每行对应列的元素,来求出方阵对角线元素之和。最后,我们输出结果。程序的输出示例如下:include <stdio.h> int main(){ \/\/ 方阵的尺寸 int n;printf("Enter the size of the ...

c语言短路运算问题 求助大佬
因为a,b,c都等于0,a++是先运算后自增,所以a++与++b或c++等于0与++b或c++ 又因为逻辑运算短路(也就是当0与任何表达式时,将不进行后面的表达式计算,直接得出结果为0,当1或任何表达式时,将不进行后面的表达式计算,直接得出结果为1)所以++b被跳过,没有执行,因此a++与++b或c++的表达式的值等于0与...

c语言的题,有大佬能帮帮我吗?
double fact(int n){ if(n<2)return 1.0;return n*fact(n-1);} double cal(int x,int n){ double t;int i;for(t=x,i=0;i<n;++i)t*=x;return t\/fact(n);} int main(){ int x,n,i;double sum;scanf("%d%d",&x,&n);for(i=1,sum=1;i<=n;++i)sum+=cal(x,i...

c语言问题,麻烦大佬帮忙看看
x是输出十六进制数的意思,故题目需要你进行十六进制运算,不过是把十六进制的194与十进制的18相加而已,可以统一转换进制为十六进制,然后运算,不需要进位。运算过程是:0x194+18==0x194+0x12 而 0x194+0x12==0x1A6。下面的watch框是验算

...下这些题目的的答案怎么选出来的?谢谢各位大佬了。
A、B、C都是同一个错误,试图让常指针s1[0]或s2[0]指向别处,错。D——将常指s2[0]针指向的目标拷贝到常指针s1[0]指向的目标空间,正确。(2)A——试图在数组初始化以外的地方“整体”向数组赋值,错。B——把b[0][0]元素的值赋给a[0][0]元素,正确。C——a[0]、b[0]都是常指针...

C语言文件问题,求大佬解答
i++)\/\/有改动 { for(j=i+1; j<k; j++)\/\/有改动 { if(str3[i]>str3[j]){ t = str3[i];str3[i] = str3[j];str3[j] = t;} } } puts(str3);if((fp = fopen("C.txt","w")) == NULL){ printf("error");exit(0);} fputs(str3,fp);return 0;} ...

相似回答