c - 指向数组类型的指针(自定义类型)

标签 c arrays pointers typedef

我在代码中定义了一个自定义数组类型,还定义了一个指向该数组类型的指针。我试图找到自定义数组类型和指向自定义数组类型的指针之间的相关性。如何为自定义数组类型的指针赋值,以便我可以使用指针遍历数组?

#include<stdio.h>

typedef int array_type[3];
typedef array_type* ptr_array_type;

int main() {
   array_type a = {2,3,4};
   ptr_array_type ptr;

   ptr = a;

   printf("%d\n",*ptr);

}

我知道数组名称包含指向第一个元素的指针。我不断收到无效的打印输出: -50204788 而不是 2。

我也收到警告:

警告:从不兼容的指针类型“int *”[-Wincompatible-pointer-types]分配给“ptr_array_type”{又名“int (*)[3]”} ptr = a;

有人能告诉我正确的方法来为指针分配适当的值,以便我可以遍历数组。

最佳答案

How do I assign a value to the pointer of the custom array type so I can iterate through the array using the pointer?

给定 array_type 定义

typedef int array_type[3];

,您可以为其分配array_type 的指针类型是int *:

typedef int *ptr_array_element;

您可以(表面上)将 array_type 的对象分配给 ptr_array_element 类型的指针:

array_type a = {2, 3, 4};
ptr_array_element p = a;

完成后,您可以通过推导运算符访问第一个数组元素。

assert(*p == 2);

您通常可以像 C++ 迭代器一样使用它:

printf("%d\n", *p++);
printf("%d\n", *p++);
printf("%d\n", *p++);

但不要。

谨慎使用 typedef,它们隐藏不相关的细节,显着提高代码清晰度,或类似的。避免使用隐藏相关细节的 typedef,例如该类型的对象是指针或数组,除非这些细节可能从类型名称中非常清楚,或者除非隐藏它们是有意且无害的。隐藏数组或指针的性质很少是无害的。

关于c - 指向数组类型的指针(自定义类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54520502/

相关文章:

c - 为什么我收到聚集初始化程序不是编译时常量警告?

使用带有 Arduino 的瑞士流量计计算脉冲,它是如何完成的?

php - 匹配第二个数组中的子字符串

在函数中更改数组不会更改它在 main 中的值

c - 有没有办法在 GCC 的 C 宏中使用参数作为前缀

c - 如何确定 EXE 进行的所有系统和库调用

arrays - Julia:扁平化数组/元组数组

c - 如何在 C 语言中声明一个可变大小的二维数组?

c - 链表节点内存分配

c++ - 在 C++ 中优化指针拷贝