C指针指针

Aka*_*ash 2 c

是否

int **p 
Run Code Online (Sandbox Code Playgroud)

int *p[1]
Run Code Online (Sandbox Code Playgroud)

意思是一样的吗?因为两者都可以传递给允许更改指针对象的函数,也可以通过p [0],*p来访问它们.

更新,感谢您的帮助,艰难的内存管理似乎有所不同.访问机制是否保持不变

*例如:p [0]变成*(p + 0)&*p(都指向某个东西)

谢谢

Use*_*ess 7

不完全的.

int **p;
Run Code Online (Sandbox Code Playgroud)

声明一个指针p,用于指向类型的对象int *,即指向int的指针.它没有分配任何存储,或者指向p任何特定的存储.

int *p[1];
Run Code Online (Sandbox Code Playgroud)

声明数组p一个指针诠释的:p"S型可以衰减int **时,它的周围通过,但不同的是先声明,p这里有一个初始值,一些存储待用.


回覆.关于访问语法的编辑问题:是的,*p == p[0] == *(p+0)适用于所有指针和数组.


回覆.评论询问sizeof:它正确处理可以看到声明的数组,因此它给出了总存储大小.

void foo()
{
    int **ptr;
    int *array[10];

    sizeof(ptr);   // just the size of the pointer
    sizeof(array); // 10 * sizeof(int *)

    // popular idiom for getting count of elements in array:
    sizeof(array)/sizeof(array[0]);
}

// this would always discard the array size,
// because the argument always decays to a pointer
size_t my_sizeof(int *p) { return sizeof(p); }
Run Code Online (Sandbox Code Playgroud)