gpt4 book ai didi

c - 如何将指针打印到指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:23 24 4
gpt4 key购买 nike

我是一个新手,试图了解双指针的工作原理并打印双指针。我将 m 递增 1,但它始终指向 p 指向的最后一个值。有人可以帮帮我吗?

#include <stdio.h>

int main () {
/* an array with 5 elements */
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double *p;
double **m;
int i;

p = balance;
m = &p;
/* output each array element's value */
printf( "Array values using pointer\n");

for ( i = 0; i < 5; i++ ) {
printf("*(p + %d) : %f\n", i, *(p+i) );
}

for ( i = 0; i < 5; i++ ) {
printf("**(m + %d) : %f\n", i, *m);
m++;
}

printf( "Array values using balance as address\n");

for ( i = 0; i < 5; i++ ) {
printf("*(balance + %d) : %f\n", i, *(balance + i) );
}
return 0;
}

最佳答案

你的数组 balance是这样的

+--------+--------+--------+--------+--------+| 1000.0 |    2.0 |    3.4 |   17.0 |   50.0 |+--------+--------+--------+--------+--------+

初始化后pm是这样的:

+---+| m |+---+|v+---+| p |+---+|V+--------+--------+--------+--------+--------+| 1000.0 |    2.0 |    3.4 |   17.0 |   50.0 |+--------+--------+--------+--------+--------+

m指向p的位置, 和 p指向 balance 的第一个值数组。

当您取消引用 m 时(即当你做 *m 时)你得到 where m 的值指着。此值是另一个 指针 ( p ),您需要取消引用以获取数组中的元素。

使用 m balance 中的第二个元素(即 balance[1] )是 (*m)[1] .


现在如果你递增 m (例如 m++ )它将指向 p 的下一个元素:

     +---+     | m |     +---+     |     v+---+| p |+---+|V+--------+--------+--------+--------+--------+| 1000.0 |    2.0 |    3.4 |   17.0 |   50.0 |+--------+--------+--------+--------+--------+

你可以清楚地看到这里的问题:它不再指向p。你不能再用它来访问 balance大批。取消引用 m增量之后将导致未定义的行为

此外,对于任何指针或数组,数组索引表达式和指针算术表达式是相等的。所以对于 balance , 表达式 balance[i]等于*(balance + i) .它们之间确实没有区别。

关于c - 如何将指针打印到指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40866719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com