Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Pointers_Sizeof - Fatal编程技术网

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以