#include <stdio.h>
#include <stdlib.h>
int* create_arr(int number1, int number2, int number3) {
int* arr = (int*) malloc(sizeof(int) * 3);
arr[0] = number1;
arr[1] = number2;
arr[2] = number3;
return arr;
}
int main(void) {
int* arr = create_arr(2, 3, 4);
printf("%lu\n", sizeof(arr));
}
printf在main输出中4。这是有道理的,因为这就是指针在我的系统上占用的字节数。但是如果我想显示结果数组的所有值呢?如何找到数组的结尾?
在上面的示例中,我当然知道该函数create_arr创建了一个包含 3 个值的数组,但我正在尝试创建一个返回匹配值数组的数组过滤器函数。这样一个数组的大小将取决于原始数组,我不知道它会是什么。那该怎么办?如何显示结果?
至少有两种选择:
在单独的变量中返回大小(将指针传递给函数)
使用一些服务价值作为最终元素。如果已知数组只能包含某个范围内的数字,例如只能包含正数,则第一个负数可以作为数组末尾的标记。这种方法用于字符串——指向
char(数组)的指针,其最后一个元素包含一个空字符\0。这很方便,因为您不需要额外的命名变量,但您必须花费 O(N) 时间搜索字符串(数组)的长度。如果不可能得出这样的数字(所有数字都对数组有效),那么值得使用单独的变量(参见第 1 点)。没有其他可移植的方法来找出基于指向动态内存的指针分配了多少字节(以及元素)。