结构和指针

时间:2012-12-02 04:49:24

标签: c pointers struct

我有一些关于结构和指针的问题

对于这个结构:

typedef struct tNode_t {
    char *w;
} tNode;

如果我想更改/知道* w的值,我该怎样才需要使用t.w = "asdfsd"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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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 */
};

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

struct tag *st_ptr;

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

st_ptr = &my_struct;

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

(*st_ptr).age = 63;

仔细看看。它说,用括号中的那个替换st_ptr指向的那个,即my_struct结构。因此,这与my_struct.age相同。

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

st_ptr->age = 63;

答案 2 :(得分:0)

  

如果我想更改/知道* w的值我应该如何使用t.w =   “asdfsd”而不是t-> w =“asdfasd”?

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

  

在我的测试代码中,有什么原因导致不需要吗?

在您的代码中,您已将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);

答案 3 :(得分:0)

  

如果我想更改/知道* w的值我应该如何使用t.w =   " asdfsd"而不是t-> w =" asdfasd"?

ttNode,而不是指向tNode的指针,因此.是适当的访问者。

  

我在没有t.w =(char *)的情况下成功编译了这个   的malloc(28 *的sizeof(char)的);在我的测试代码中,有一个原因   不需要吗?

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