gpt4 book ai didi

c - 指向引用变量的结构元素的指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:58 25 4
gpt4 key购买 nike

考虑:

struct
{
char *rcssMonitoredServices;
int nSomeVar;
} appinfo;

常规使用:

appinfo.rcssMonitoredServices=strdup("something");

但是现在考虑:

char *RefToStructVar[]=
{
appinfo.rcssMonitoredServices,
"\0"
};

目的是我们可以使用 RegToStructVar[0] 指针对 appinfo.rcssMonitoredServices 执行操作。

我在数组中指向变量是有充分理由的。在整数变量的情况下,我们没问题。指向 *char 的指针完全不同。

如果我对 appinfo.nSomeVar 使用相同的技术

int *varpointers[] =
{
&appinfo.nSomeVar,
0
};

varpointers[0]=196;
printf("%i",appinfo.nSomeVar) // -> "196"

我认为,给定 RefToStructVar[0] 包含一个指向 appinfo.rcssMonitoredServices 的指针,做类似的事情

RefToStructVar[0]=strdup("something");

将等同于:

appinfo.rcssMonitoredServices=strdup("something");

但是没有。

这个

RefToStructVar[0]=strdup("something");

段错误。

也许是基本的..但此刻我很困惑。

--

稍后

这是段错误:

    struct 
{
char *cVar;
int n;
} mystruct;

char *aVars[]=
{
mystruct.cVar,
"\0"
};

aVars[0]=strdup("something");

这个有效:

    struct 
{
char *cVar;
int n;
} mystruct;

char **aVars[]=
{
&mystruct.cVar,
"\0"
};

*aVars[0]=strdup("something");

最佳答案

RefToStructVar[0]=strdup("something");

不等同于

appinfo.rcssMonitoredServices=strdup("something");

因为虽然这两个指针指向同一个内存,但它们是两个不同的指针,给其中一个赋值不会改变另一个。

此外,绝对没有理由为什么 RefToStructVar[0] = anything 应该出现段错误,除非 RefToStructVar 不是数组而是无效指针或其他东西。我认为您误诊了坠机地点。

你说:

The intent being that we may perform operations against appinfo.rcssMonitoredServices using the RegToStructVar[0] pointer.

然而,这不是它正在做的。它只是将指针从 appinfo 复制到数组中。您可以对字符串进行操作,例如以这种方式更改字符,但如果您分配给其中任何一个,它们就会变得独立。如果你想这样做,你需要一个指向指针的指针:

char** RegToStructVar[] = {
&appinfo.rcssMonitoredServices
};

关于c - 指向引用变量的结构元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com