【发布时间】:2021-12-02 19:04:01
【问题描述】:
我正在学习 C 编程中的数组,这是书中的示例程序之一(程序与书中的相同,除了最后的 printf 行)。打印 s 的值给了我数组的基地址(如预期的那样),但是当我尝试在 printf 语句中使用带有 s 的 *(value at) 运算符时,它仍然给我基地址而不是值 1234。为什么我是否需要使用 **s 来获取值而不是使用单个 * 运算符?
#include <stdio.h>
int main()
{
int s[4][2]={
{1234,56},
{1212,33},
{1434,80},
{1312,78}
};
int i;
for(i=0;i<=3;i++)
printf("Address of %d th 1-D array = %u\n", i, s[i]);
printf("%u\n", s);
return 0;
}
#include <stdio.h>
int main()
{
int s[4][2]={
{1234,56},
{1212,33},
{1434,80},
{1312,78}
};
int i;
for(i=0;i<=3;i++)
printf("Address of %d th 1-D array = %u\n", i, s[i]);
printf("%u\n", *s);
return 0;
}
【问题讨论】:
-
你可以把
*s想象成s[0],把**s想象成s[0][0],这两个是什么类型?另外,如果类型是任何类型的数组,当作为参数传递给 printf 时,它会衰减为指向其第一个元素的指针。 -
s 是一个数组数组。 s[0] 是一个数组。 s[0][0] 是一个整数。