c - 我无法在 C 中获得数组长度
问题描述
我想得到一个数组长度,我尝试通过函数使用,但是在函数中,我得到数组长度很担心,运算结果是2,谁能帮我做这个。
#include <stdio.h>
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
void print_arry(int *nums){
int i;
int len;
GET_ARRAY_LEN(nums, len);
printf("%d\n",len);
for (i=0; i<len; i++)
printf ("%d ", nums[i]);
}
int main() {
int nums[]={ 2,7,3,11,15 };
int target = 9;
print_arry(nums);
return 0;
}
但这是对的,我不知道哪里错了。
#include <stdio.h>
#define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}
int main() {
int nums[]={ 2,7,3,11,15 };
int target = 9;
int len;
GET_ARRAY_LEN(nums, len);
printf("%d\n",len);
return 0;
}
解决方案
当您将数组传递给函数(或以多种其他方式使用它)时,它会衰减为指向该数组第一个元素的指针(a)。
这意味着它将是一个指针,具有指针的大小,而不是原始数组的大小。
如果您想知道大小,则必须在它仍然是一个数组时解决它并传递它,例如:
void print_arry (int *nums, size_t sz) {
printf ("%z:", sz);
for (size_t i = 0; i < sz; ++i) {
printf (" %d", nums[i]);
}
putchar ('\n');
}
:
print_arry (nums, sizeof(nums) / sizeof(*nums));
(a)参见,例如C11 6.3.2.1 Lvalues, arrays, and function designators /3
:
除非它是运算
sizeof
符、运算符_Alignof
或一元&
运算符的操作数,或者是用于初始化数组的字符串字面量,否则类型为“类型数组”的表达式将转换为类型为“类型指针”的表达式" 指向数组对象的初始元素,不是左值。如果数组对象具有寄存器存储类,则行为未定义。
推荐阅读
- azure-webjobs - Azure Batch Job 顺序执行不起作用
- ios - WKWebView 可水平滚动
- matlab - 提取matlab/八度符号表达式的特定部分?
- python - 如何防止 gunicorn 工作者在尝试访问相同文件时崩溃
- regex - 查找长文本段落并在第 n 个字符处拆分
- java - 在 Java 中,如何解释字符串的 UTF-8 字节?
- javascript - 为什么即使构造函数在其原型链中,类的 instanceof 也会返回 false?
- java - java.sql.SQLException:连接太多
- vue.js - 将 VueJS 部署到 GitHub 页面
- c - 可变参数宏调用 fprintf:如何向 __VA_ARGS__ 添加参数?