lennyface 发表于 2024-10-17 10:34:27

int *p[3]和int (*p)[3]到底有区别吗?

学习数组指针和指针数组时出现了疑惑,在一些群中询问了各个大佬后,他们都异口同声地说两者没有区别,都是定义一个数组并且这个数组中存储指针,但是我搜到地资料中都是将两者区分开的,现在有点混乱了。。。。。

FishC 发表于 2024-10-17 10:34:35

其实,`int *p` 和 `int (*p)` 是有区别的,两者的含义不同:

1. **`int *p`**:
   这是声明一个指向整数的指针。`p` 是一个指针变量,它存储的是一个整数的地址。

2. **`int (*p)`**:
   这通常出现在复杂类型声明中,比如函数指针或者指针数组的情况。单独使用 `(*p)` 没有特别意义,但在语法上允许。

最常见的情况是数组指针的声明,比如 `int (*p)`,表示的是一个指向含有10个整数的数组的指针,而不是指向整数的指针。

所以在理解时,注意它们对应的具体使用场景。区别是基于指针本身指向的数据结构而来的。如果看到 `(*p)` 在代码中,通常结合整体声明来看会更加清晰。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

lennyface 发表于 2024-10-17 10:42:56

FishC 发表于 2024-10-17 10:34
其实,`int *p` 和 `int (*p)` 是有区别的,两者的含义不同:

1. **`int *p`**:


那int (*p)指的是p指向一个含有十个整数的数组的指针,那()如果没有特殊含义,int *p为什么又是一个含有十个指针的数组的指针,不是没有特殊含义吗。。。{:5_99:}

FishC 发表于 2024-10-17 10:43:04

lennyface 发表于 2024-10-17 10:42
那int (*p)指的是p指向一个含有十个整数的数组的指针 ...

抱歉,我在上一个回复中没有表述清楚。让我们详细区分一下这两个声明方式:

1. **`int *p`:**
   - 这是一个指针数组。`p` 是一个数组,其中包含 3 个指针,每个指针指向一个整数。
   - 这种情况下,`p`(其中 `i = 0, 1, 2`)是一个指向 `int` 的指针。

2. **`int (*p)`:**
   - 这是一个数组指针。`p` 是一个指针,指向一个包含 3 个整数的数组。
   - 这种情况下,`*p` 是一个包含 3 个整数的数组。

为了帮助理解,举个例子:

int a = {1, 2, 3};
int *p1;      // 这是一个指针数组
int (*p2);    // 这是一个数组指针

// 指针数组:每个元素是一个指针
p1 = &a;
p1 = &a;
p1 = &a;

// 数组指针:指向整个数组
p2 = &a;

总而言之,`int *p` 和 `int (*p)` 的区别主要在于它们“指向”的内容不同:一个是数组的指针(指整个数组),一个是指针的数组(指向单个元素)。希望这样能帮助解惑!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

lennyface 发表于 2024-10-17 10:52:19

FishC 发表于 2024-10-17 10:43
抱歉,我在上一个回复中没有表述清楚。让我们详细区分一下这两个声明方式:

1. **`int *p`:**


(int*)和(int)*是什么意思

FishC 发表于 2024-10-17 10:58:29

lennyface 发表于 2024-10-17 10:52
(int*)和(int)*是什么意思

`(int*)` 和 `(int)*` 在 C/C++ 中通常出现在类型转换或复杂的指针操作中。让我们分别看看它们的含义:

1. **`(int*)`**:
   - 这是一个类型转换操作符,用于将某个指针转换为指向 `int` 类型的指针。
   - 例如,如果你有一个 `void*` 类型的指针 `ptr`,你可以使用 `(int*)ptr` 将其转换为 `int*` 类型。

2. **`(int)*`**:
   - 这种写法通常不常见,因为它可能会引起语法错误或逻辑错误。
   - 如果出现在代码中,可能是想表达对某个指针解引用后再进行类型转换,但这种写法不正确。
   - 正确的写法应该是 `*(int*)ptr`,表示将 `ptr` 转换为 `int*` 类型后再解引用。

如果你在代码中看到 `(int)*`,建议检查上下文,确保其用法符合逻辑和语法规则。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: int *p[3]和int (*p)[3]到底有区别吗?