我有一些关于结构和指针的问题
对于这个结构:
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);
}
感谢。
答案 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"?
t
是tNode
,而不是指向tNode
的指针,因此.
是适当的访问者。
我在没有t.w =(char *)的情况下成功编译了这个 的malloc(28 *的sizeof(char)的);在我的测试代码中,有一个原因 不需要吗?
这不是必需的,因为"abcd"
仍然在范围内,因此w
可以指向它。如果您希望w
指向持久内存管理的内容,则必须像使用此行一样分配自己的内存。