gpt4 book ai didi

c - 一个地址有两个值?

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

下面的代码告诉我,对于一个地址我有两个值。例如:

Address is: 0xbfcca1ac <br>
Value is: 5

Address is: 0xbfcca1ac <br>
Value is: -1077108308

我做错了什么?

#include <stdio.h>

void Input(int *A, int n) {

int i, x=5;

for(i=0; i<n*n; i++) {
*(A+i) = x;
}

printf("\n\n\n\nAddress is: %p\n", A);
printf("Value is: %d\n", *A);

}

main() {

int A[3][3], i, j, n=3;

Input(A, n);

printf("\nAddress is: %p\n", A);
printf("Value is: %d", *A);
return 0;
}

最佳答案

在您的 main() 中,A 是一个二维数组,因此 *A 是一个包含 3 个整数的数组。使用 %d 格式打印 *A 会给出未定义的行为,因为 *A 不是 int。

在你的Input()中,A是一个指向int的指针,所以它的值被当作一个的地址>整数*Aint 的值,假定它位于该地址。

main() 传递给 Input() 的值将是 A[0] 的地址。其类型为“指向 3 int 数组的指针”,但其值恰好等于(在 main() 中)&A[0][0]

编译器将(如果配置正确)对您的代码发出警告,因为它正在将值传递给这些函数期望的不同类型的函数。由于类型不匹配(函数需要一种类型的参数,但被赋予另一种类型的参数)(至少)存在未定义行为的可能性,因此您真的不应该忽略此类警告。即使您能够以某种方式推理出正在发生的事情。

关于c - 一个地址有两个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34103215/

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