我是C编程的新手。我想打印2,因为我的第一个元素是2D数组中的2。但是我知道n保存数组的第一个地址所以* n应该打印第一个元素是2我的代码
#include <stdio.h>
int main()
{
int n[3][3]={2,4,3,6,8,5,3,5,1};
printf("%d\n",*n);
return 0;
}
为什么要打印一个地址。任何人都可以向我解释一下吗?
答案 0 :(得分:1)
你需要像这样声明你的数组:
int n[3][3]={{2,4,3},{6,8,5},{3,5,1}};
请注意,第一个[3]
不是必需的(但指定它没有任何问题)。顺便说一句,如果您启用警告,例如使用gcc -Wall
,编译器会警告初始化程序中缺少大括号。
然后打印您可以使用的第一个值:
printf("%d\n",n[0][0]);
或者,如果您愿意:
printf("%d\n",*n[0]);
你有一个或多个数组,所以这需要第0个元素(它是一个数组),然后取消引用它以得到第0个值。
答案 1 :(得分:1)
2d数组只是一个数组数组,因此*n
实际上是第一个子数组,用于打印第一个子数组的第一个元素:
printf("%d\n", **n);
或者这更简单,更清晰:
printf("%d\n", n[0][0]);
答案 2 :(得分:1)
我认为您在%d
上收到了一些警告,因为您没有尝试打印该值 - 仅限地址。
对于2D数组,要获取任何值,您需要取消引用两次。即**n
。
*n
也适合,但对于一维数组。
您可以在此处使用**n
,*n[0]
或n[0][0]
代替*n
。
答案 3 :(得分:0)
如果n
是一个整数数组,*n
会打印第一个整数,正如您所期望的那样。
但是n
不是那样的。是一个二维数组。查看它的一种方法是:一组数组。所以实际上*n
是一个数组。
答案 4 :(得分:0)
如果您有一维数组 -
int n[9]={2,4,3,6,8,5,3,5,1};
printf("%d\n",*n);
因为如果你取消引用1D数组,它将获取元素。现在它将打印2。 但
int n[3][3]={2,4,3,6,8,5,3,5,1};
这是一个二维数组,所以你需要两次dererence。如果你有一次取消它只会获取数组的地址。 n
,n[0]
,*n
,&n
,&n[0]
都代表它的起始地址。
尝试 -
printf("%d\n",**n);
或
printf("%d\n",n[0][0]);