Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道数组长度并将其放入C中的整数变量中?_C - Fatal编程技术网

如何知道数组长度并将其放入C中的整数变量中?

如何知道数组长度并将其放入C中的整数变量中?,c,C,如何知道数组长度并将其放入C中的整数变量中 int array []={1,2,3,4,5}; int arrayLength = ???????? ; int i; for (i = 0; i < arrayLength ;i++){ printf("the i is :%i \n", i ); } int数组[]={1,2,3,4,5}; int arrayLength=; int i; 对于(i=0;i

如何知道数组长度并将其放入C中的整数变量中

int array []={1,2,3,4,5};
int arrayLength = ???????? ;
int i;

for (i = 0; i < arrayLength ;i++){
    printf("the i is :%i \n", i );
}
int数组[]={1,2,3,4,5};
int arrayLength=;
int i;
对于(i=0;i
我会使用:

const size_t arrayLength = sizeof array / sizeof *array;
第一个
sizeof array
是所有
array
的大小(以字节为单位),第二个是第一个元素的大小,当除以该值时,即为元素数

大小可以保持为
size\u t
,当然它是
const
,因为它不会改变

请注意,如果将数组传递到函数中,此代码将不起作用,因为在这种情况下数组会衰减为指针,因此需要一个单独的参数来表示大小。

我将使用:

const size_t arrayLength = sizeof array / sizeof *array;
第一个
sizeof array
是所有
array
的大小(以字节为单位),第二个是第一个元素的大小,当除以该值时,即为元素数

大小可以保持为
size\u t
,当然它是
const
,因为它不会改变


请注意,如果将数组传递到函数中,此代码将不起作用,因为在这种情况下,数组会衰减为指针,因此需要一个单独的大小参数。

数组大小是常量。而且必须在编译时知道它。所以您知道它,并且可以在程序中使用它。

数组大小是恒定的。而且必须在编译时知道它。所以您知道它,并且可以在程序中使用它。

可变长度数组,因为C99,允许在运行时确定大小的数组。@chux在VS中执行此操作时,我总是遇到编译错误。这就是我这么说的原因。您使用的VS版本可能不符合C99或C11的C标准。也许可以使用更兼容/最新的编译器?不,例如,如果用户输入他的名字,您想读取他的名字。这个例子我不知道数组长度。考虑到这个错误,VS2017仍然不符合C99。它实际上可能符合C11;在那里,VLA是可选的。但是,如果它声称符合C11,编译器应通过定义
\define\uu STDC\u NO\u VLA\uuu1
来记录VLA的缺失,以允许您的代码检测到编译器不支持VLA。它也可能只是不支持它们,并且不需要进一步的ado就符合C90。但是如果MS只支持四分之一世纪前的标准。可变长度数组,从C99开始,允许在运行时确定大小的数组。@chux在VS中执行此操作时,我总是遇到编译错误。这就是我这么说的原因。您使用的VS版本可能不符合C99或C11的C标准。也许可以使用更兼容/最新的编译器?不,例如,如果用户输入他的名字,您想读取他的名字。这个例子我不知道数组长度。考虑到这个错误,VS2017仍然不符合C99。它实际上可能符合C11;在那里,VLA是可选的。但是,如果它声称符合C11,编译器应通过定义
\define\uu STDC\u NO\u VLA\uuu1
来记录VLA的缺失,以允许您的代码检测到编译器不支持VLA。它也可能只是不支持它们,并且不需要进一步的ado就符合C90。但如果微软只支持四分之一世纪的标准,那就有点令人沮丧了。