这里我使用指针打印出一个多维数组的元素。通常我们必须用星号打印出指针值。但是这里我可以打印没有星号的值。这可能是什么原因?< / 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
}
答案 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中完全有效,因为它提供了无限的方式来拍摄自己的脚,但不是你想要的。 我建议打开所有编译警告 - 你应该在你的代码片段中获得一些警告......