指针
#include <stdio.h>void f(int* q, int n)
{
for (int i=0;i<n;i++)
(*q++)++;
}
void main()
{
int a = { 1,3,5,7,9 }, i;
f(a, 5);
for (i = 0; i < 5; i++)
printf("%3d", a);
}
为什么结果会是 2 4 6 8 10 呢
不太明白括号外的++的作用(怎么会对值自增而不是对地址自增呢) 已经解引用了,当然不对地址自增 jhq999 发表于 2022-12-20 12:32
已经解引用了,当然不对地址自增
但是两个自增符号之间的计算顺序怎么判断呢,为什么是先让值加一再让地址加一呢 本帖最后由 jhq999 于 2022-12-20 21:00 编辑
kasumi_official 发表于 2022-12-20 19:39
但是两个自增符号之间的计算顺序怎么判断呢,为什么是先让值加一再让地址加一呢
除非考试不建议死扣这玩意儿,可能不同编译器结果不一样,建议编程时尽量分解
例如这个可以分解成
(*q)++;
q++;
00E31428mov eax,dword ptr ;先解引用把指针q赋给eax
00E3142Bmov ecx,dword ptr //把指针q所指向的内存里的值赋给ecx
00E3142Dadd ecx,1 ;ecx加一
00E31430mov edx,dword ptr ;指针p赋给edx
00E31433mov dword ptr ,ecx;把加一后的值赋给指针q所指向的内存
00E31435mov eax,dword ptr ;把指针q赋给eax
00E31438add eax,4 ;eax加一,因为int是4个字节,所以汇编加4
00E3143Bmov dword ptr ,eax;把加一后的eax赋给q
00E3143Ejmp f+27h (0E31417h) jhq999 发表于 2022-12-20 20:32
除非考试不建议死扣这玩意儿,可能不同编译器结果不一样,建议编程时尽量分解
例如这个可以分解成
(*q) ...
谢谢 我就是在往年的考试题里看到的{:5_99:}
页:
[1]