C 编程指针和数组


#include <stdio.h>
int main()
{
    int a[5];
    printf("%pn%pn",a+1,&a[1]);
    return(0);
}

当上面的代码构建并运行时。输出为:

0029ff00
0029ff00

然后当我将第 5 行从 a + 1 更改为 &a + 1

#include <stdio.h>
int main()
{
   int a[5];
   printf("%pn%pn",&a+1,&a[1]);
   return(0);
}

输出为:

0029ff10
0029ff00

当我包含与号 ( & ( 时指的是什么,它与格式说明符%p有关吗?

printf("%pn%pn",&a+1,&a[1]);

在这一行中,两个地址是不同的,因为&a[1]给出a[1]的地址,&a+1给出的地址是数组最后一个元素之后的一个。

&a给出数组的地址,并向其添加1会将数组的大小添加到数组a的基址。

所以基本上,&a+1=数组的基址a+数组a的大小(该地址被打印(

符号"&"是元素的地址,所以在printf中,它会打印出元素的内存地址。

它与格式说明符 %p 有关吗?

%p 正在访问指针(指针引用的地址(,这就是为什么你会得到像"x0000"这样的值......

尝试在任务中使用 %d 或 %i 作为整数值。

&a[1]等效于&*(a + 1) = (a + 1),这就是为什么第一个代码段打印相同的地址值。

&a 是数组 a 的地址。它是类型 int (*)[5] .将1添加到数组&a会将其增强到数组之外的一个,即它将向&a数组添加 sizeof(a) 个字节。

推荐阅读: c中的数组名称到底是什么?.

"&"表示"地址",%p 格式表示将值打印为指针(地址(,指针以十六进制打印。 执行"指针算术"时,当您将指针加 1 时,指针将递增 (1 * sizeof(type((,其中"type"是指向的数据类型。

请记住,在 C 中,数组变量是一个指针。 &a 不是数组的地址,而是存储数组地址的地址。 因此,当您将 1 添加到 &a 时,&a 包含 a,这是一个指针,所以 (&a + 1( 是 (&a + size(a((,并且由于 a 是一个数组,它是数组的大小。 在这种情况下,一个 4 个整数的数组是 16 个字节。

最新更新