-2

我遇到了一个非常奇怪的问题。我定义了一个结构并将它作为一个常量指针传递给一个函数。代码如下所示。

typedef struct a{
  char str1[256];
  ...
  int x;
}a_t;

int f(..., const a_t *a){...}

a_t a;
...
a.x = 1;
f(..., &a);
...

问题是一旦进入f(),我会打印出变量a->x,它总是0!??但是如果我将结构成员 x 移动到结构的顶部(在其他成员之前),它将是 1,这是正确的。

使用结构指针作为参数有什么技巧或陷阱吗?

[EDIT1] printf 在函数 f() 的第一行被调用

4

1 回答 1

2

无法评论,所以我会建议调试选项。您能否在函数中及之前添加结构元素 x 地址的打印。如果相同,则有人正在更改它,否则我们看的不是相同的值。

typedef struct a{
  char str1[256];
  ...
  int x;
}a_t;

int f(..., const a_t *a)
{
    printf("X value %d, address %p", a->x, &(a->x));
    ...
}


a_t a;
...
a.x = 1;
printf("X value %d, address %p", a.x, &(a.x));
f(..., &a);
...

该功能的详细视图也可以提供帮助

于 2012-08-11T09:56:38.753 回答