相关疑难解决方法(0)

如何找到'sizeof'(指向数组的指针)?

首先,这里是一些代码:

int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法找出ptr指向的数组的大小(而不是仅仅给出它的大小,在32位系统上是4个字节)?

c arrays pointers sizeof

288
推荐指数
8
解决办法
35万
查看次数

sizeof在可变长度数组上的行为(仅限C)

我的问题是sizeof()当传递参数是一个动态数组变量长度数组时,究竟如何表现.

我们来看一个例子:

int fun(int num_of_chars)
{
    char name_arr[num_of_chars] = {0};

    /* Do something*/

    return sizeof(name_arr);
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,很明显返回值不是编译时常量.因为大小取决于运行时的值num_of_chars.

引用C99标准(6.5.3.4):

sizeof操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.结果是整数.如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果是整数常量.

我从[....操作数被评估....]中可以理解的是,当传递的参数sizeof()动态数组变量长度数组时,sizeof()'表现得像'一个函数而不是一个运算符.

我的理解是对的吗?

c sizeof

15
推荐指数
2
解决办法
3572
查看次数

使用指针知道数组的大小

如何使用malloc分配的指针知道数组的大小?

#include <stdio.h>

int main(){
    int *ptr = (int *)malloc(sizeof(int * 10));
    printf("Size:%d",sizeof(ptr));
    free(ptr_one);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我只得到指针的大小,即8.如何修改代码以获得40的数组大小.

c memory arrays pointers sizeof

0
推荐指数
1
解决办法
285
查看次数

标签 统计

c ×3

sizeof ×3

arrays ×2

pointers ×2

memory ×1