鱼C论坛

 找回密码
 立即注册
查看: 1293|回复: 2

C语言-循环过程中结构体成员数据改变

[复制链接]
发表于 2023-9-5 20:43:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位老哥,在使用C语言结构体的时候我发现了这样一个问题,想上网搜一搜但是不知道怎么描述它,在结构体中存储的数据,在某一个循环过程中,没有涉及到循环的成员内部存储的数据发生了改变,这是因为什么呢?

这是i=1时的值

这是i=1时的值

这是i=22的值

这是i=22的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-5 20:43:27 | 显示全部楼层
这个问题可能是由于结构体成员在循环过程中被错误地修改导致的。在C语言中,结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。当结构体对象被传递给函数或循环时,实际上是传递了结构体对象的副本。如果在循环中修改了结构体成员的值,那么只会修改副本的值,而不会影响原始结构体对象。

为了解决这个问题,可以使用指针来传递结构体对象的地址,以便在循环中直接修改原始结构体对象的成员。具体步骤如下:

1. 定义一个指向结构体的指针变量。
2. 在循环之前,将指针变量指向结构体对象的地址。
3. 在循环中通过指针变量来修改结构体成员的值。

以下是一个示例代码:
#include <stdio.h>

struct MyStruct {
    int data;
};

int main() {
    struct MyStruct obj;
    struct MyStruct *ptr = &obj;

    for (int i = 0; i < 5; i++) {
        ptr->data = i;  // 直接修改结构体成员的值
        printf("data: %d\n", obj.data);
    }

    return 0;
}

在上述代码中,通过指针变量 ptr 来修改 obj 结构体对象的成员 data 的值。在每次循环中, data 的值都会被修改,并打印出来。这样就可以确保在循环过程中正确地修改结构体成员的值,而不是修改副本的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-5 21:00:20 | 显示全部楼层
isdkz 发表于 2023-9-5 20:43
这个问题可能是由于结构体成员在循环过程中被错误地修改导致的。在C语言中,结构体是一种用户自定义的数据 ...

但是为什么会出现这种情况呢?我明明没有对这个成员进行修改呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表