Không có. Đó là bởi vì mảng sẽ phân rã thành con trỏ tới phần tử đầu tiên khi chuyển đến hàm.
Bạn phải tự vượt qua độ dài hoặc sử dụng thứ gì đó trong chính mảng đó để biểu thị kích thước.
Đầu tiên, tùy chọn "truyền độ dài". Gọi hàm của bạn với một cái gì đó như:
int setIncludes (char *includes[], size_t count) {
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax."};
setIncludes (arr, sizeof (arr)/sizeof (*arr));
setIncludes (arr, 2); // if you don't want to process them all.
Một phương pháp trọng điểm sử dụng một giá trị đặc biệt ở cuối để cho thấy không có nhiều yếu tố (tương tự như \0
ở phần cuối của một mảng C char
để chỉ ra một chuỗi) và sẽ là một cái gì đó như thế này:
int setIncludes (char *includes[]) {
size_t count = 0;
while (includes[count] != NULL) count++;
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax.", NULL};
setIncludes (arr);
một phương pháp tôi đã nhìn thấy sử dụng (chủ yếu là đối với mảng không thể thiếu) là sử dụng mục đầu tiên như độ dài (tương tự như Rexx biến gốc):
int setIncludes (int includes[]) {
// Length is includes[0].
// Only process includes[1] thru includes[includes[0]-1].
}
:
int arr[] = {4,11,22,33,44};
setIncludes (arr);
Vì vậy, như giá trị tối đa? –
Giả sử bạn là người đầu tiên, @Mohit, sắp xếp. Thủ thuật 'sizeof' sẽ luôn cho bạn độ dài của mảng (giả sử nó chưa bị phân rã thành con trỏ). Sự linh hoạt là bạn không bị giới hạn khi truyền giá trị đó. Nếu bạn có một mảng có kích thước 1000 nhưng chỉ có 20 giá trị hữu ích trong nó, bạn có thể vượt qua 20 là kích thước. – paxdiablo
Tại sao bạn truyền một mảng 'int' vào một hàm mong đợi một mảng' char * '? – caf