Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:理解这个程序中的指针有困难_C_Variables_Pointers - Fatal编程技术网

C:理解这个程序中的指针有困难

C:理解这个程序中的指针有困难,c,variables,pointers,C,Variables,Pointers,执行以下代码后,我需要找到I和j的值: int i = 2; int j = 2; int *p = &i; int *q = &j; i++; j--; *p = *q + 2; *q = *p + 3; p=q; *p = *q + 1; 让我描述一下我认为在这段代码中发生了什么。 在第三行和第四行: int *p = &i; int *q = &j; 指针p和q分别初始化为i和j的地址。 在第5行和第6行: i++; j--; i变成3,j变成1。这将

执行以下代码后,我需要找到I和j的值:

int i = 2;
int j = 2;
int *p = &i;
int *q = &j;
i++;
j--;
*p = *q + 2;
*q = *p + 3;
p=q;
*p = *q + 1;
让我描述一下我认为在这段代码中发生了什么。 在第三行和第四行:

int *p = &i;
int *q = &j;
指针p和q分别初始化为i和j的地址。 在第5行和第6行:

i++;
j--;
i变成3,j变成1。这将导致*p为3,*q为1

在第七行

*p = *q + 2
意味着p指向的值等于q指向的值加上2,所以i变成3

在下一行:

*q = *p + 3;
p = q;
j变成6

我不确定下一行会发生什么:

*q = *p + 3;
p = q;
我想它的意思是:“I的地址等于j的地址”。我不知道在这种情况下I和j的最终值是多少。你能帮我了解发生了什么事吗

p = q;

这仅仅意味着现在
p
指向与
q
指向的东西相同的东西,即
j

想象一下,在初始初始化
p
q
之后,您的内存是这样的:

+---+ +---+ | p | --> | i | +---+ +---+ +---+ +---+ | q | --> | j | +---+ +---+ 它看起来是这样的:

+---+ | p | --\ +---+ \ +---+ >--> | j | +---+ / +---+ | q | --/ +---+ +---+ |p|--\ +---+ \ +---+ >-->|j| +---+ / +---+ |q|--/ +---+
p=q
表示
p
现在指向
q
点的位置,即
j
。这之后的行表示
j
以值
7
结束,并且
*p
*q
也计算为7。不过,剩下的部分你都做对了。让这更容易的一种方法是在调试器中运行它(基于IDE的调试器做得最好,因为你可以在每个步骤后看到每个变量的变化)。感谢@kevindtimm的提示。你如何这么快做到这一点??:D