gpt4 book ai didi

c - C 中的 int * 和 int *[100] 类型之间有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 16:39:10 25 4
gpt4 key购买 nike

有点菜鸟所以不要在这里杀了我。

以下代码有什么区别?

int *p;         //As i understand, it creates a pointer to an variable of size int.
int *p[100]; //Don't really know what this is.
int (*p)[100]; // I have come to understand that this is a pointer to an array.

最佳答案

  1. 这是一个指向 int指针:

    int *p;
    ┌────┐
    │int*│
    └────┘

    它应该指向 int ,像这样:

    ┌────┐
    │int*│
    └─┃──┘

    ┌───┐
    │int│
    └───┘
  2. 这是一个数组,包含 100 个指向 int 的指针:

    int *p[100];

    也就是说,它给你 100 个指针。

    ┌────┬────┬────┬────┬────┬────┬┄
    │int*│int*│int*│int*│int*│int*│
    └────┴────┴────┴────┴────┴────┴┄

    每个指针都应该指向一个int ,也许是这样的:

    ┌────┬────┬────┬────┬────┬────┬┄
    │int*│int*│int*│int*│int*│int*│
    └─┃──┴─┃──┴─┃──┴─┃──┴─┃──┴─┃──┴┄
    ▼ ▼ ▼ ▼ ▼ ▼
    ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌┄
    │int││int││int││int││int││int││
    └───┘└───┘└───┘└───┘└───┘└───┘└┄

    当然,没有理由他们不能都指向同一个int ,或其他。

    如果你想要很多指针,你可能想使用一个指针数组迭代。例如,您可以动态分配对象并让每个指针指向不同的对象:

    p[0] = new int(0);
    p[1] = new int(0);
    // ...

    也许动态分配int s 不是最好的例子,但我认为这一点很明确。

  3. 这是一个指向 100 int 数组的指针:

    int (*p)[100];

    也就是说,它只给你 1 个指针:

    ┌───────────┐
    │int(*)[100]│
    └───────────┘

    它应该指向一个包含 100 int 的数组小号:

    ┌───────────┐
    │int(*)[100]│
    └─┃─────────┘

    ┌───┬───┬───┬───┬───┬───┬┄
    │int│int│int│int│int│int│
    └───┴───┴───┴───┴───┴───┴┄

    当您在数组名称上使用寻址运算符 (&) 时,您将获得一个指向数组的指针。例如:

    int arr[100] = { /* some initial values */ };
    int (*p)[100] = &arr;

    在这里,我获取了 arr 的地址数组,它给了我一个指向该数组的指针。如果你想访问数组的一个元素,你必须先取消引用指针:(*p)[3]将访问元素 3。


边注:

永远记住 arrays are not pointers 。正如我们刚刚看到的,我们可以获取数组的地址以获得指向它的指针,就像 C++ 中的任何其他(非临时)对象一样。数组和指针之间唯一的特殊联系是数组的名称可以隐式转换为指向数组第一个元素的指针。这意味着以下内容是有效的:

int arr[100] = { /* some initial values */ };
int* p = arr;

指针p将指向 arr 中的第一个元素.注意 p 不是指向数组的指针,而是指向数组元素的指针。

(另请注意,没有数组类型函数参数这样的东西。如果您将类似 int p[] 的内容写为函数参数,编译器会将其转换为 int*。)

关于c - C 中的 int * 和 int *[100] 类型之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20635774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com