c - 为什么打印指针值不需要这个二维数组的星号

标签 c arrays pointers

这里我使用指针打印出多维数组的元素。通常我们必须加上星号才能打印出指针值。但是这里我可以打印没有星号的值。这可能是什么原因?

#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/

相关文章:

c - 为多功能 i2c 设备编写内核模块 - 一个还是多个?

python - numpy.where 与二维数组

python - 为什么我的代码结果 'module' 对象不可下标?

无法在C中显示双向链表

c - int * (*) 的类型 (int * , int * (*)())

c - 正整数之和 - 打印垃圾值

javascript - 在 javascript 中使用自定义条件分割字符串(不重复)

c++ - 使用指针显示多维数组中的元素

c - c中结构中的动态分配内存

c - 逻辑如何工作,将反向数组分配给指针