1

我有几个关于结构和指针的问题

对于这个结构:

typedef struct tNode_t {
    char *w;
} tNode;

如果我想更改/知道我需要使用t.w = "asdfsd"而不是*w 的值t->w = "asdfasd"怎么办?

而且我t.w = (char *) malloc(28*sizeof(char)); 在没有测试代码的情况下成功编译了它,是否有不需要 tt 的原因?

样品主要:

int main()
{
    tNode t;
    char w[] = "abcd";
    //t.word = (char *) malloc(28*sizeof(char));
    t.word = w;
    printf("%s", t.word);
}

谢谢。

4

4 回答 4

2

t->w是 ie 的简写,如果是指向结构的指针,(*t).w则使用箭头才有意义。t

此外,由于您分配的字符串是硬编码的(因此,在编译时确定),因此无需在运行时动态分配其内存。

于 2012-12-02T05:00:59.043 回答
0

看看这个教程: http: //pw1.netcom.com/~tjensen/ptr/ch5x.htm

struct tag {
char lname[20];      /* last name */
char fname[20];      /* first name */
int age;             /* age */
float rate;          /* e.g. 12.75 per hour */
};

好吧,所以我们知道我们的指针将指向一个使用 struct 标签声明的结构。我们用声明声明这样一个指针:

struct tag *st_ptr;

我们将它指向我们的示例结构:

st_ptr = &my_struct;

现在,我们可以通过取消引用指针来访问给定的成员。但是,我们如何取消引用指向结构的指针呢?好吧,考虑一下我们可能想要使用指针来设置员工年龄的事实。我们会写:

(*st_ptr).age = 63;

仔细看看这个。它说,将括号内的内容替换为 st_ptr 指向的内容,即结构 my_struct。因此,这分解为与 my_struct.age 相同。

然而,这是一个相当常用的表达式,C 的设计者创建了一个具有相同含义的替代语法,即:

st_ptr->age = 63;
于 2012-12-02T05:00:46.373 回答
0

如果我想更改/知道 *w 的值,我需要使用 tw = "asdfsd" 而不是 t->w = "asdfasd" 怎么办?

如果您t是指针,则需要使用t->w. 否则你应该使用t.w.

在我的测试代码中,是否有不需要 tt 的原因?

在您的代码中,您已经将您设置t.word为指向存储您的char w[] = "abcd";. 所以你不需要malloc为你的t.word.

另一个malloc需要的例子是:

tNode t;
t.word = (char *) malloc(28*sizeof(char));
strcpy(t.word, "Hello World");
printf("%s", t.word);
于 2012-12-02T05:00:49.950 回答
0

如果我想更改/知道 *w 的值,我需要使用 tw = "asdfsd" 而不是 t->w = "asdfasd" 怎么办?

t是 a tNode,而不是指向 的指针tNode,因此.是适当的访问器。

我在没有 tw = (char *) malloc(28*sizeof(char)); 的情况下成功编译了它 在我的测试代码中,是否有不需要 tt 的原因?

这不是必需的,因为"abcd"仍在范围内,因此w可以指向它。如果你想w指向持久内存管理的内容,它必须像使用这一行一样分配自己的内存。

于 2012-12-02T05:00:54.220 回答