我在C中有以下代码:
int array[5] = {0,1,2,3,4};
int * p = &array[0];
如何使用指针p
来获取此数组p
的大小指向?
答案 0 :(得分:7)
对不起,这实际上是不可能的。数组的大小不会保存在任何地方。你必须自己做。
答案 1 :(得分:2)
不能仅通过指针完成。指针实际上是数组第一个元素的内存中的地址。数组大小不会自动与此指针关联。你必须自己跟踪大小。
您可以使用的一种解决方法是为数组元素保留一个特殊值,比如-1。如果您可以安排最后一个元素始终具有此值,那么您始终可以通过搜索该值来查找该数组的结尾。这就是字符串具有空终止符的原因,因此strlen()和family可以找到字符串的结尾。
答案 2 :(得分:1)
简答:在C中,无法从指针中检索数组大小。尺寸必须单独传递。
稍微简短的答案:在C中,指针只是内存中某个地点的地址。指针甚至不保证这里有一个有效的数组或变量;它只是一个内存位置的描述符。
事实上,在C中,数组“大小”的概念有点松散。可以分配一定量的连续内存,但是没有检查指针是否离开该内存。
例如:
int a[] = {1, 2, 3};
int b = a[7];
将正确编译。 C没有任何边界检查!
答案 3 :(得分:0)
使用指向它的指针无法知道数组的大小。你无法确定,因为没有办法知道数组的结尾或知道我们到达了数组的最后一个元素。
答案 4 :(得分:0)
所以,在阅读了之前的5个答案之后,这里有一个更好的答案:
a)您无法使用指针获取数组的元素数。 常见的解决方法是:
mem*()
计算的字符串)b)您可以使用数组名称获取数组的元素数:
struct foo[my_expr];
ìnt count = sizeof array / sizeof *array;