这里我使用指针打印出多维数组的元素。通常我们必须加上星号才能打印出指针值。但是这里我可以打印没有星号的值。这可能是什么原因?
#include <stdio.h>
#include <string.h>
int main ()
{
int arr[1][2]={{1,2},{3,4}};
int *ptr;
ptr=arr;
printf("%d",(ptr[0]+1)); // *(ptr[0]+1) giving error
}
最佳答案
您将 ptr 声明为“int *ptr”,这意味着“ptr 指向包含 int 的一维内存位置”。在 C 中,指针在很大程度上相当于数组(也是指向内存位置的指针)。 然后为它分配一个值“ptr = arr”,这意味着“ptr 指向包含 int 的内存位置”
现在您可以使用 *ptr(这意味着“返回 ptr 指向的内存位置中的值”)或 ptr[0](这意味着“检索ptr 指向的内存位置中的数组”)。两者都会返回相同的值 - 内存位置 ptr
中的值因此,执行“ptr[0] +1”意味着“检索 ptr 指向的内存位置中的第一个元素,然后将检索到的值加 1”。
代码的主要问题是您声明了一个二维数组(顺便说一句 - 您声明了一个 1x2 数组,但用一组 2x2 初始值填充了它),但随后声明了一个一维指针来访问它与。在 C 中完全有效,因为它提供了无限种方式来射你自己的脚,但不是你想要的。 我建议打开所有编译警告 - 您应该在代码片段中看到其中的一些警告...
关于c - 为什么打印指针值不需要这个二维数组的星号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731753/