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