下面的这段 C 语言,结构体的定义和初始化是什么意思? to.p_path

2017-09-06 10:14:19 +08:00
 deweixu

typedef struct {
	char	*p_end;			/* pointer to NULL at end of path */
	char	*target_end;		/* pointer to end of target base */
	char	p_path[PATH_MAX];	/* pointer to the start of a path */
} PATH_T;

static char emptystring[] = "";
PATH_T to = { to.p_path, emptystring, "" };

2829 次点击
所在节点    程序员
12 条回复
knva
2017-09-06 10:34:48 +08:00
百度 typedef
deweixu
2017-09-06 11:05:58 +08:00
@knva 重点不是 typedef 啊,是

`PATH_T to = { to.p_path, emptystring, "" };`
Shura
2017-09-06 11:13:00 +08:00
@deweixu to 是 PATH_T 类型,`PATH_T to = { to.p_path, emptystring, "" };`是给 to 整体赋值,to.p_path 为数组的首元素的地址,赋值给 tp.p_end。
suikator
2017-09-06 11:21:16 +08:00
C99 标准?
wuddds
2017-09-06 11:22:40 +08:00
@Shura to 已经初始化了?
feiyuanqiu
2017-09-06 11:24:22 +08:00
我估计楼主想问的是为什么可以用 to.p_path 初始化 to.p_end

因为 to.p_path 在 to 声明时就分配了内存空间
Shura
2017-09-06 11:29:35 +08:00
@wuddds 声明时已经分配空间了
zergmk2
2017-09-06 11:30:25 +08:00
这个是 GCC 初始化结构体的一种方法
PATH_T to = { to.p_path, emptystring, "" }; 相当于
PATH_T to = {
.p_end = to.p_path,
.target_end = emptystring,
.p_path = ""
};
z0z
2017-09-06 11:52:14 +08:00
如果有条件的话,楼主在机器上试一下就知道了,估计是在面试?

1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4
5 #define PATH_MAX (8)
6
7 typedef struct
8 {
9 char *p_end;
10 char *target_end;
11 char p_path[PATH_MAX];
12 }PATH_T;
13
14 static char emptystring[]="";
15 PATH_T to = {to.p_path,emptystring,""};
16
17 int main(void)
18 {
19 printf("emptystring=0x%x\n",emptystring);
20 printf("to.p_end=[0x%x],to.target_end=[0x%x],to.p_path=[0x%x]\n",to.p_end,to.target_end,to.p_path);
21
22
23 return 0;
24 }


xx@server:~/temp/testtype$ ./test
emptystring=0x601068
to.p_end=[0x601050],to.target_end=[0x601068],to.p_path=[0x601050]
xx@server:~/temp/testtype$
deweixu
2017-09-06 13:10:58 +08:00
deweixu
2017-09-06 13:17:48 +08:00
@Shura 那么 p_path 和 p_end 指向同一个地址了哦?
Shura
2017-09-06 17:37:56 +08:00
@deweixu 对,p_path 指向了 p_end 所在的地址

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX