小编Dor*_*tan的帖子

结构的数组字段在按值输入函数时是否完全克隆?

在C:

  • 当通过值(通过参数)将结构发送到函数时,会创建新的结构,因此更改函数内的结构将不会更改原始结构.

  • 数组通过值(通过参数)发送到函数时,会创建一个新指针,因此更改函数内的数组不会更改原始数组,而是更改函数内的数组值(因为我们有指向原始数组的指针)将更改原始数组中的值.

  • 当带有数组字段的结构(通过参数)通过值发送到函数时,????? 是创建的,因此更改函数内的数组(指针)不会更改原始数组,更改数组值不会更改原始数组中的值.

第三点是否意味着结构数组字段在被发送到函数时将被完全克隆?为什么不只是使用指针?规范对此有何规定?

我玩过的一段代码:

typedef struct {
    int value;
    int array[3]; /* initialized to 0 by default */
} Struct_t;

void foo(Struct_t structure)
{
    printf("-- %p\n", structure.array); /* Pointer to local array */

    structure.value = 1;
    *structure.array = 1;       /* Won't change the original array */
    *(structure.array + 1) = 1; /* Won't change the original array */
    structure.array[2] = …
Run Code Online (Sandbox Code Playgroud)

c arrays struct pointers pass-by-value

3
推荐指数
1
解决办法
77
查看次数

为什么1024*1024*1024*2!= 1024*1024*1024*2

在开始时,我写了一个演示来获得2G内存,但我遇到了这样的问题,我不知道为什么,num1,num2,num3有什么不同?

#include<stdio.h>
int main(){
    unsigned long num1 = 1024*1024*1024*2;
    unsigned long num2 = 1024*1024*1024*2.0;
    unsigned long num3 = 1024*1024*1024;
    num3 *= 2;
    printf("num1:%lu\n num2:%lu\n num3:%lu\n", num1, num2, num3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

num1:18446744071562067968
num2:2147483648
num3:2147483648
Run Code Online (Sandbox Code Playgroud)

c integer-overflow

3
推荐指数
1
解决办法
416
查看次数

标签 统计

c ×2

arrays ×1

integer-overflow ×1

pass-by-value ×1

pointers ×1

struct ×1