2014-04-09 140 views
0

以下代码在屏幕上打印“1”。我的问题是关于评论栏。我以为ptr是第一个元素a [0] [0]的地址,所以* p已经是1的值, 我在哪里错了?对于多维表的地址,有人可以提供一些教程吗?我总是困惑。提前致谢。C程序指针指向多维表

#include<stdio.h> 
void fun(int **p); 

int main() 
{ 
    int a[3][4] = {1, 2, 3, 4, 4, 3, 2, 8, 7, 8, 9, 0}; 
    int *ptr; 
    ptr = &a[0][0]; // *ptr = *&a[0][0]=a[0][0] 
    fun(&ptr); 
    return 0; 
} 
void fun(int **p) 
{ 
    printf("%d\n", **p); 
} 
+0

好像很少有人使用/理解*基址指针*了,那就是,只是“一个”声明后, int a [3] [4] ... – RobP

+0

你没有错。输出是1,这是你的预期。您正在将指针'ptr'的地址发送到fun()'函数,所以为了获得价值,您必须将其解除引用两次,这就是您所做的。你认为你错在哪里? 'p'是双指针。 '* p' ='ptr' ='&a [0] [0]',和'** p' ='* ptr' ='*&a [0] [0]'='a [0] [0] '='1' – Vinay

+0

@Vinay我看到我错了。就像你说的那样,我发送ptr的地址,这个地址已经被我省略了。谢谢! –

回答

1

指针是保持的另一个变量 存储器位置的变量所以PTR是指向变量的地址A [0] [0]为1 一个指针,因为[3] [4 ] = {1,2,3,4,4,3,2,8,7,8,9,0};

ptr = &a[0][0]; 

哪个是第一行的第一个元素(因为[] []是一个二维阵列)

fun(&ptr); 

功能乐趣传递指针的地址PTR

在功能

void fun(int **p) 

它将地址作为参数,并且指针p将该地址作为参数,即;指向指针的指针

p指向ptr的地址,其中ptr指向地址a [0] [0]。因此,预期产出应在1

有关指针和数组的详细信息,请参考以下链接: http://pw1.netcom.com/~tjensen/ptr/pointers.htm