C 获取数组的长度
我一直想知道如何获得数组的元素数。在这个网站的某个地方,我找到了一个答案,告诉我声明以下宏:C 获取数组的长度,c,arrays,pointers,sizeof,C,Arrays,Pointers,Sizeof,我一直想知道如何获得数组的元素数。在这个网站的某个地方,我找到了一个答案,告诉我声明以下宏: #define NELEMS(x) (sizeof(x) / sizeof(x[0])) 它适用于定义为以下内容的阵列: type arr[]; 但不适用于以下情况: type *arr = (type) malloc(32*sizeof(type)); 在这种情况下,它返回1(应该返回32)。 我希望得到一些提示,说明sizeof运算符生成一类变量的大小。它不计算分配给指针(表示数组)的内存量
#define NELEMS(x) (sizeof(x) / sizeof(x[0]))
它适用于定义为以下内容的阵列:
type arr[];
但不适用于以下情况:
type *arr = (type) malloc(32*sizeof(type));
在这种情况下,它返回1(应该返回32)。
我希望得到一些提示,说明
sizeof
运算符生成一类变量的大小。它不计算分配给指针(表示数组)的内存量
详细说明,
- 如果是
,类型arr[32]
本质上是sizeof(arr)
sizeof(type[32])
- 如果
,类型为*arr
本质上是sizeof(arr)
sizeof(type*)
strlen()
请记住,字符串的定义是以null结尾的字符数组
也就是说,在你的代码中
type *arr = (type) malloc(32*sizeof(type));
这是非常错误的。为了避免这种错误,我们建议。
sizeof
运算符生成一类变量的大小。它不计算分配给指针(表示数组)的内存量
详细说明,
- 如果是
,类型arr[32]
本质上是sizeof(arr)
sizeof(type[32])
- 如果
,类型为*arr
本质上是sizeof(arr)
sizeof(type*)
strlen()
请记住,字符串的定义是以null结尾的字符数组
也就是说,在你的代码中
type *arr = (type) malloc(32*sizeof(type));
这是非常错误的。为了避免这种错误,我们建议。
sizeof
运算符生成一类变量的大小。它不计算分配给指针(表示数组)的内存量
详细说明,
- 如果是
,类型arr[32]
本质上是sizeof(arr)
sizeof(type[32])
- 如果
,类型为*arr
本质上是sizeof(arr)
sizeof(type*)
strlen()
请记住,字符串的定义是以null结尾的字符数组
也就是说,在你的代码中
type *arr = (type) malloc(32*sizeof(type));
这是非常错误的。为了避免这种错误,我们建议。
sizeof
运算符生成一类变量的大小。它不计算分配给指针(表示数组)的内存量
详细说明,
- 如果是
,类型arr[32]
本质上是sizeof(arr)
sizeof(type[32])
- 如果
,类型为*arr
本质上是sizeof(arr)
sizeof(type*)
strlen()
请记住,字符串的定义是以null结尾的字符数组
也就是说,在你的代码中
type *arr = (type) malloc(32*sizeof(type));
这是非常错误的。为了避免这种错误,我们建议。指针不保留关于它们是指向单个元素还是数组的第一个元素的信息 如果你有这样的陈述
type *arr = (type) malloc(32*sizeof(type));
然后这里是arr
不是数组。它是指向动态分配的内存范围开始的指针
或者即使您有以下声明
type arr[10];
type *p = arr;
指针同样不知道它是指向单个对象还是数组的第一个元素。例如,你可以在任何时候写作
type obj;
p = &obj;
因此,当处理指向数组第一个元素的指针时,必须将引用数组的实际大小保留在某个位置(在其他变量中)
至于数组本身,实际上可以使用表达式
sizeof( arr ) / sizeof( *arr )
或
但是数组不是指针,尽管它们经常被转换成pojnters,以指向它们的第一个元素,但很少有例外。sizeof操作符就是这样一个例外。sizeof运算符中使用的数组不会转换为指向其第一个元素的指针。指针不保留有关它们是指向单个元素还是数组的第一个元素的信息 如果你有这样的陈述
type *arr = (type) malloc(32*sizeof(type));
然后这里是arr
不是数组。它是指向动态分配的内存范围开始的指针
或者即使您有以下声明
type arr[10];
type *p = arr;
指针同样不知道它是指向单个对象还是数组的第一个元素。例如,你可以在任何时候写作
type obj;
p = &obj;
因此,当处理指向数组第一个元素的指针时,必须将引用数组的实际大小保留在某个位置(在其他变量中)
至于数组本身,实际上可以使用表达式
sizeof( arr ) / sizeof( *arr )
或
但是数组不是指针,尽管它们经常被转换成pojnters,以指向它们的第一个元素,但很少有例外。sizeof操作符就是这样一个例外。sizeof运算符中使用的数组不会转换为指向其第一个元素的指针。指针不保留有关它们是指向单个元素还是数组的第一个元素的信息 如果你有这样的陈述
type *arr = (type) malloc(32*sizeof(type));
然后这里是arr
不是数组。它是指向动态分配的内存范围开始的指针
或者即使您有以下声明
type arr[10];
type *p = arr;
指针同样不知道它是指向单个对象还是数组的第一个元素。例如,你可以在任何时候写作
type obj;
p = &obj;
因此,当处理指向数组第一个元素的指针时,必须将引用数组的实际大小保留在某个位置(在其他变量中)
至于数组本身,实际上可以使用表达式
sizeof( arr ) / sizeof( *arr )
或
但是数组不是指针,尽管它们经常被转换为pojnters以