为什么作为参数发送的数组的大小与main中的相同?
#include <stdio.h>
void PrintSize(int p_someArray[10]);
int main () {
int myArray[10];
printf("%d\n", sizeof(myArray)); /* As expected, 40 */
PrintSize(myArray);/* Prints 4, not 40 */
}
void PrintSize(int p_someArray[10]){
printf("%d\n", sizeof(p_someArray));
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何查找sizeof(指向数组的指针)
我知道sizeof运算符在编译时被评估并替换为常量.鉴于此,如何在程序的不同点传递不同数组的函数是否可以计算它的大小?我可以将它作为参数传递给函数,但如果我不是必须的话,我宁愿不必添加另一个参数.
这是一个例子来说明我的要求:
#include <stdio.h>
#include <stdlib.h>
#define SIZEOF(a) ( sizeof a / sizeof a[0] )
void printarray( double x[], int );
int main()
{
double array1[ 100 ];
printf( "The size of array1 = %ld.\n", SIZEOF( array1 ));
printf( "The size of array1 = %ld.\n", sizeof array1 );
printf( "The size of array1[0] = %ld.\n\n", sizeof array1[0] );
printarray( array1, SIZEOF( array1 ) );
return EXIT_SUCCESS;
}
void printarray( double p[], int s )
{
int i;
// …Run Code Online (Sandbox Code Playgroud) 一个让我烦恼的简单问题.假设我在main中定义了一个数组,就像这样int arr[5].现在,如果我仍然在main中并且我设置int i = sizeof(arr)/sizeof(arr[0])然后我被设置为5,但是如果我将数组作为函数参数传递并在此函数中执行完全相同的计算,则得到不同的数字.这是为什么?起初我认为它是因为在一个函数中arr是一个指针,但据我所知,它arr也是一个指针在主内部!
另外,如果我做一些非常相似的事情,我只是动态地初始化数组,我得到了奇怪的结果:
int *arr = (int*) malloc(sizeof(int) * 5);
int length = sizeof(*arr) / sizeof(arr[0]);
printf("%d\n",length);
Run Code Online (Sandbox Code Playgroud)
这里的输出是1.有什么想法吗?提前致谢!