首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为int array[]在c#中的哨兵值,sizeof()检查什么?

作为int array[]在c#中的哨兵值,sizeof()检查什么?
EN

Stack Overflow用户
提问于 2013-10-19 02:06:08
回答 2查看 1K关注 0票数 4

让我们考虑int array[] = {2,33,4,56,7,8};//案例A

如果sizeof of ()选中'\0‘作为char[]数组的结尾!作为一个哨兵值,多少(数组)检查以找到int数组的结束,因此在A种情况下数组的大小?

如果我要实现intArray,就没有访问哨兵值信息的自由了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-19 02:08:58

sizeof不检查任何东西。它看起来只是一个函数调用,但它实际上是一个操作符,一个编译器技巧,插入编译器在编译时已知的大小。

下面是sizeof与C数组的交互方式:当您声明一个数组时,您可以将它的大小指定为常量、运行时整数表达式,或者通过向数组提供一定数量的值来隐式地指定它的大小。

当在编译时知道元素数时,编译器将sizeof(array)替换为实际编号。当元素的数量直到运行时才知道时,编译器将准备一个特定于实现的特殊存储位置,并将大小存储在那里。运行中的程序需要这些信息来进行堆栈清理。编译器还将此隐藏信息告知sizeof实现的运行时部分,以返回正确的值。

票数 14
EN

Stack Overflow用户

发布于 2013-10-19 02:19:33

sizeof不是一个函数,而是一个编译时操作符,它被替换为变量的大小。对于真正的数组(不是指针),它被替换为数组内容的字节大小,因为它在编译时就知道了;

试着让自己相信以下几点:

代码语言:javascript
复制
void print_size(int[] array)
{
  printf("%u\n", sizeof(array)); //Prints 4 (= sizeof(int*))
                                 //May print 8 on 64b architectures
}

int main()
{
  int array[] = {2,33,4,56,7,8};
  printf("%u\n", sizeof(array)); //Prints 24 (= 6*sizeof(int))
  print_size(array);
  return 0;
}

这是因为,在main内部,编译器知道数组是一个6int的数组,而函数print_size可以与任何数组一起调用,因此它的大小是事先不知道的:它被视为int* (但我不确定它是否为lvalue)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19461557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档