Arrays 为什么*双指针值与*指针数组相同?

Arrays 为什么*双指针值与*指针数组相同?,arrays,c,pointers,Arrays,C,Pointers,我有一个关于指向指针数组的双指针的问题。 我不明白为什么*double\u指针值与*pointer\u数组值相同。 我想这句话可能有点意思,“int**pptr=ptr”。 为什么不是“int**pptr=&ptr”? 请帮帮我 #include <stdio.h> int main(){ // doulble pointer with array. int arr[4] = {1,2,3,4}; int *pt = arr; int **ppt = &

我有一个关于指向指针数组的双指针的问题。 我不明白为什么*double\u指针值与*pointer\u数组值相同。 我想这句话可能有点意思,“int**pptr=ptr”。
为什么不是“int**pptr=&ptr”? 请帮帮我

#include <stdio.h>

int main(){


  // doulble pointer with array.
  int arr[4] = {1,2,3,4};
  int *pt = arr;
  int **ppt = &pt;
  printf("%p, %d\n", *ppt, *pt);
  // The result is different. *ppt != *pt

  // double pointer with pointer array.
  int ptr1[4] = {1,2,3,4};
  int ptr2[4] = {5,6,7,8};
  int ptr3[4] = {9,10,11,12};
  int * ptr[3] = {ptr1, ptr2, ptr3};
  int ** pptr = ptr;
  // Why is it ptr? I thought it should be &ptr.

  printf("%p, %p\n", *pptr, *ptr); 
  // The result is same. *pptr = *ptr
  // Why *pptr is the address of ptr1? It thought should be the address of ptr.


  return 0;

}
#包括
int main(){
//带数组的双指针。
int-arr[4]={1,2,3,4};
int*pt=arr;
int**ppt=&pt;
printf(“%p,%d\n”,*ppt,*pt);
//结果不同。*ppt!=*pt
//带指针数组的双指针。
int ptr1[4]={1,2,3,4};
int ptr2[4]={5,6,7,8};
int ptr3[4]={9,10,11,12};
int*ptr[3]={ptr1,ptr2,ptr3};
int**pptr=ptr;
//为什么是ptr?我想应该是&ptr。
printf(“%p,%p\n”,*pptr,*ptr);
//结果是一样的。*pptr=*ptr
//为什么*pptr是ptr1的地址?它应该是ptr的地址。
返回0;
}

你知道数组到指针的衰减吗?@tadman你的意思是取消引用而不是衰减?不知道,@tadman这种情况叫做数组到指针的衰减?我会查的。谢谢。为了清楚起见,您会问为什么将
ptr
赋值给变量会导致该变量的值为
ptr
,而不是
&ptr
?这就是作业的工作原理