为什么打印指针值不需要这个2d数组的星号

时间:2016-04-20 00:28:00

标签: c arrays pointers

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

#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

}

1 个答案:

答案 0 :(得分:0)

你宣称ptr为&#34; int * ptr&#34;这意味着&#34; ptr 指向包含int&#34;的1维内存位置。在C中,大部分指针等同于数组(也是指向内存位置的指针)。 然后你给它一个值&#34; ptr = arr&#34;现在意味着&#34; ptr 指向包含int&#34;

的内存位置

现在你可以用* ptr(这意味着&#34;返回ptr&#34指向的内存位置中的值;)或ptr [0](这意味着&#)来强制 34;检索ptr&#34;)指向的内存位置中数组的第一个元素。两者都将返回相同的值 - 内存位置 ptr

中的值

所以,做&#34; ptr [0] + 1&#34;表示&#34;检索ptr指向的内存位置中的第一个元素,然后将1添加到检索到的值&#34;。

您的代码的主要问题是您声明了一个二维数组(并且顺便说一下 - 您声明了一个1x2数组,但用一组2x2的初始值填充它),但随后您声明了一个一维指针来访问它与。在C中完全有效,因为它提供了无限的方式来拍摄自己的脚,但不是你想要的。 我建议打开所有编译警告 - 你应该在你的代码片段中获得一些警告......