以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:
解释与示例
你遇到的问题主要是因为对指针数组的使用方法和打印方式的理解有误。下面我会详细解释并提供修改后的代码示例。
问题解释
-
直接赋值的代码:
- 在这段代码中,你将变量
a
, b
, c
的值直接赋给了指针数组 arr
。由于数组元素是指针类型,这里实际上是将变量的值的地址赋给了指针。 - 打印时,
arr[0]
, arr[1]
, arr[2]
实际上是打印了这些地址上存储的值,即变量 a
, b
, c
的值。
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { a , b , c };
printf("%d %d %d", arr[0], arr[1], arr[2]);
return 0;
}
-
取地址的代码:
- 在这段代码中,你将变量
a
, b
, c
的地址赋给了指针数组 arr
。这里指针数组的每个元素都存储了一个地址。 - 打印时,
arr[0]
, arr[1]
, arr[2]
实际上是打印了这些地址的值,即变量 a
, b
, c
的地址。
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { &a,&b,&c };
printf("%d %d %d", arr[0], arr[1], arr[2]);
return 0;
}
解决方案
解决方案1:打印变量的值
如果你想打印变量的值,需要使用指针数组并打印指针指向的值。可以通过解引用指针来实现。
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { &a, &b, &c };
printf("%d %d %d", *arr[0], *arr[1], *arr[2]);
return 0;
}
解释:
解决方案2:打印变量的地址
如果你想打印变量的地址,需要使用 %p
格式化输出,并进行类型转换。
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { &a, &b, &c };
printf("%p %p %p", (void*)arr[0], (void*)arr[1], (void*)arr[2]);
return 0;
}
解释:
- 使用
(void*)
强制类型转换,确保地址以正确的格式打印。
总结
通过上述代码示例,可以清晰地展示如何正确地使用指针数组来打印变量的值或地址。希望这些解释和示例能帮助你更好地理解指针数组的使用方法。