首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sizeof()函数中插入此数组?

如何在sizeof()函数中插入此数组?
EN

Stack Overflow用户
提问于 2022-08-25 13:26:29
回答 2查看 61关注 0票数 0

我现在在这里问了几个问题,大家都不喜欢,所以我会把问题说得简短些。

我试图为int做一个动态分配的数组,然后我想给它分配一个常量数组以供测试,但我做不到。

当我们想要创建一个字符数组时,我们编写: char *arr = "abc";

它不是这样工作的: int *arr = {1,2,3};

但当我这样做时,它确实起作用了: int *arr = (int[]) {1,2,3};

老实说,我不知道那个演员是怎么做的,我很高兴,直到我试着得到元素的数量: int n=sizeof of (Arr)/sizeof(Int);

  1. 如何使它工作?

  1. 如何将该数组传递给
  2. ()?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-08-25 13:40:39

,演员是如何让它工作的?

字符串文字在C中是一个特别受支持的“语法糖”,它是一个未命名的char静态数组,并附加了一个'\0'。这就是为什么您不需要在这样的初始化中提供类型信息的原因。顺便说一下,不要试图修改它的任何元素,它是没有定义的。

代码语言:javascript
复制
char *arr = "abc";

对于任何其他类型的数组,您需要帮助编译器确定正确的类型。因此,您将该表达式“扩展”到复合文字。这不是一个演员:

代码语言:javascript
复制
int *arr = (int[]){ 1, 2, 3, };

如何将这个数组传递给

()?

sizeof是一个一元运算符,如- (作为数值的负号)和~

它的操作数是对象或类型。后者需要放在括号中。

但是,由于您声明arr是指向数组的第一个元素的指针,所以您丢失了有关数组大小的信息。因此,sizeof,您不能使用,,,here,来获取arr指向的元素数。

解决方案是分别存储这些信息。

如果软件设计允许,则可以将数组定义为实际数组。

代码语言:javascript
复制
int arr[] = { 1, 2, 3, };

现在您可以获得这个数组中的元素数:

代码语言:javascript
复制
size_t n = sizeof arr / sizeof arr[0];
票数 1
EN

Stack Overflow用户

发布于 2022-09-15 05:40:12

sizeof不是(运行时)函数调用。当大小正确使用时,很少需要"()“。

代码语言:javascript
复制
char *p = "abc"; // pointer to 4 byte read-only array
int n = sizeof *p; // "sizeof' is compiler "facility". @ compile time *p can be measured
代码语言:javascript
复制
char p[] = "abc"; // mutable 4 byte array, initialised 'a','b','c','\0'
int n = sizeof p; // can be measured at compile time
代码语言:javascript
复制
char *p = NULL; // p could be assigned to point anywhere
p = "abc";
int n = strlen( p ); // runtime function call on a pointer to a null terminated string
代码语言:javascript
复制
int arr[] = { 1, 2, 3, 4, }; // compiler secretly includes code initialising array
int n = sizeof arr/sizeof arr[0]; // compiler "knows" these dimensions, so sizeof "works"

最后一个示例将有效地简化为4 x sizeof int / sizeof int然后是4x4/4然后是4,这个定义与int n = 4;相同,但由精确的编译器计算。

重复: time不是一个运行时函数调用;它是一个编译时“设施”(又名“操作符”)。

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

https://stackoverflow.com/questions/73488365

复制
相关文章

相似问题

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