取消引用指针的值是多少?

时间:2009-12-22 19:24:41

标签: dereference

我意识到我对取消引用指针的价值感到困惑,因为我正在阅读带有以下代码片段的C文本:

int main() 
{ 
    int matrix[3][10];                 // line 3: matrix is tentatively defined
    int (* arrPtr)[10] = matrix;       // line 4: arrPtr is defined and initialize
    (*arrPtr)[0] = 5;                  // line 5: what is the value of (*arrPtr) ?

我的困惑在于最后一行中* arrPtr的值。这是我对此的理解。

第3行,矩阵被声明(暂定定义)为由10个int类型元素组成的3个数组元素的数组。

第4行,arrPtr被定义为指向10个int类型元素的数组的指针。它也被初始化为ptr到10个元素的阵列(即矩阵的第一行)

现在第5行,arrPtr被解除引用,产生实际的数组,因此它的类型是10个int的数组。

我的问题:为什么数组的值,只是数组的地址而不是与它的元素有关?

3 个答案:

答案 0 :(得分:1)

数组变量matrix 的值是数组,但它(很容易)“降级”为指向其第一个项目的指针,然后将其指定给{{1} }。

要查看此内容,请使用arrPtr(类型&matrix)或int (*)[3][10](等于sizeof matrix)。

此外,关于这个定义没有任何试验性。

编辑:我错过了隐藏在代码评论中的问题:sizeof(int) * 3 * 10*arrPtr类型的对象,因此当您在其上使用int[10]时,你得到第一个项目,然后你分配[0]

指针和数组被有目的地定义为行为相似,这有时令人困惑(在你学习各种怪癖之前),但也非常通用和有用。

答案 1 :(得分:0)

我认为你需要澄清你的问题。如果你的意思是printf("%i", arrPtr);的值是什么,那么它将是数组的地址。如果你的意思是printf("$i",(*arrPtr)[0] );那么我们就会有一个更加丰富的问题​​。

答案 2 :(得分:0)

在C中,数组几乎只是一种方便。所有“数组”变量都是指向数据块开头的指针;正如int []等同于int*,即int的内存中的位置,int [][]是双指针,int**,指向中的位置内存...另一个指针,它又指向一个实际的特定int。

相关问题