在将数组传递给函数后,我必须知道数组的大小。例如,
#include<stdio.h>
void func(char *ptr)
{
printf("%d\n",------); //Here i want the actual size of the array passed to ptr. What to fill in the blank to get total size of the arr[]
}
main()
{
char arr[10] = "Hello";
printf("%d\n",sizeof(arr)); // here it is giving 10 bytes that is equal to total size of the array
func(arr);
}
答案 0 :(得分:3)
不,你不能,编译器不知道函数的指针指向一个数组,虽然有一些解决方案,我可以说:
1)使用函数参数传递长度:
void func(char *ptr, int length)
{
printf("%d\n",length);
}
2)如果你的数组总是char类型,你可以放一个NULL char('\ 0')并使用strlen
#include <stdio.h>
#include <string.h>
void func(char *ptr)
{
printf("%zu\n",strlen(ptr) + 1);
}
int main()
{
char arr[10] = {10,2,11,223,4,45,57,11, 12 ,'\0'};
printf("%zu\n",sizeof(arr));
func(arr);
}
// prints
//10
//10
干杯
答案 1 :(得分:2)
没办法。你也必须传递数组的大小。当您将数组传递给函数时,实际上您将指针传递给它的第一个元素。在这种情况下,函数不知道数组的大小。
答案 2 :(得分:0)
Arrays
会衰减到pointers
。仅使用指针,您无法获得数组的大小。您必须再向调用函数传递一个参数,该函数是数组的size
。
例如:
#include <stdio.h>
void fun(int myArray[10])
{
int i = sizeof(myArray);
printf("Size of myArray = %d\n", i);
}
int main(void)
{
// Initialize all elements of myArray to 0
int myArray[10] = {0};
fun(myArray);
getch();
return 0;
}
此处输出为4(取决于平台上指针的大小,可能会有所不同)
这是因为“arrays decays into pointers”
编译器假装数组参数被声明为指针,因此打印指针的大小。
因此,您必须将大小作为一个参数传递给调用函数...
#include <stdio.h>
void fun(int myArray[10], int size)
{
printf("Size of myArray = %d\n", size);
}
int main(void)
{
// Initialize all elements of myArray to 0
int myArray[10] = {0};
fun(myArray, sizeof(myArray));
getchar(); ^----------------Here you are passing the size
return 0;
}
所以,这里的输出是40 ......