Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序指针指向多维表_C_Pointers_Multidimensional Array - Fatal编程技术网

C程序指针指向多维表

C程序指针指向多维表,c,pointers,multidimensional-array,C,Pointers,Multidimensional Array,以下代码在屏幕上打印“1”。我的问题是关于评论行。我以为ptr是第一个元素a[0][0]的地址,所以*p已经是1的值了, 我错在哪里?对于多维表的地址,有人能推荐一些教程吗?我总是很困惑。提前谢谢 #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];

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

#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);
}
#包括
虚无乐趣(整数**p);
int main()
{
inta[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]
乐趣(ptr);
返回0;
}
虚无乐趣(整数**p)
{
printf(“%d\n”,**p);
}

指针是一个变量,它保存另一个变量的内存位置 所以ptr是一个指针,它指向变量a[0][0]的地址,变量a[0][0]是1 因为a[3][4]={1,2,3,4,4,3,2,8,7,8,9,0}

 ptr = &a[0][0];
哪一个是第一行的第一个元素(因为[][]是二维数组)

函数fun传递指针的地址ptr

在函数中

void fun(int **p)
它将地址作为参数,指针p将该地址作为参数,即;指向指针的指针

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

有关指针和数组的更多信息,请参阅此链接:

似乎很少有人再使用/理解基本指针了,也就是说,在声明int a[3][4]之后只使用“a”……你没有错。输出为1,这是您所期望的。您正在将指针的地址
ptr
发送到函数
fun()
,因此要获得值,必须将其解引用两次,这就是您所做的。你认为你错在哪里<代码>p是双指针<代码>*p=
ptr
=
&a[0][0]
,和
**p
=
*ptr
=
*&a[0][0]
=
1
@Vinay我知道我错在哪里了。正如你所说,我发送了ptr的地址,但我忽略了这个地址。非常感谢。
void fun(int **p)