![](/img/trans.png)
[英]how do i convert an unsigned char array into an unsigned long long?
[英]How do I pass a char(*)([long unsigned int]) as a parameter in C?
我有一个变量类型:
char (*p)[12] = calloc(n, sizeof(*p));
我需要变量保持这种方式,但是由于函数类型给我错误,我无法将其作为参数传递:
void myMethod(char *p) { ... }
我可以在myMethod中使用什么作为参数来完成这项工作?
我可以在myMethod中使用什么作为参数来完成这项工作
可能是这样的:
void myMethod(char (*p)[12])
对参数使用与对变量相同的类型:
void myMethod(char (*p)[12])
{
// do something with p
}
...
char (*p)[12] = calloc(n, sizeof *p);
myMethod(p);
请记住, p
是指向12个元素的char
数组的指针,而不是指向char
的简单指针。 因此, p[i]
的类型将为char [12]
(在大多数情况下,它将衰减为char *
)。
典型的C习惯用法是传递char*
和size_t
(或unsigned int
或任何等效形式)参数。 然后,函数的约定是它将size_t
参数视为数组/缓冲区的长度。
如果必须坚持不更改指针,则可以使用const
限定符。
char (*p)[12] = ...
在前面的示例中,您尚未定义12个元素的数组,每个元素都是指向char的指针, 但指向包含12个char元素的数组的指针。
如以下各行所述:
int *a[3];
从开始。 向右看,说出大小为3的数组。向左看,说出指针。 向右看,什么也看不到。 向左看,说出int。 大家都说a是一个大小为3的int指针数组。
添加括号是当它变得怪异的时候:
int (*a)[3];
括号就像在表达式中一样更改顺序。 当您在右边看时,您会看到右括号,除非您向左看,否则您不能跳过它。 因此,您会说a是指向3个整数的数组的指针。
检查这些链接以获得更好的解释:
不过,如果要将数组传递给函数,则可以复制它,或者由于它是数组,所以将指针传递给第一个元素(您可以使用数组的名称来完成此操作):
myMethod( p ) <- how you call the function
我个人更喜欢后一种情况,因为您要向函数传递一个简单的指针,而不是将其所有元素的副本作为数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.