由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个C的问题
相关主题
C语言,结构体转字符串。简单的难题kafka produce to AWS
C: struct 里面一个CHAR, 一个INT, 这个STRUCT 占多少字节?fread/fwrite有big/small endian问题吗?
初学C,对什么该free一直搞不明白Array in C
请教一个结构体占内存大小的问题size不固定的struct怎么定义呀?
问一道有关C++ (de)serialization的问题,谢谢!Another question
写惯了C++ code,再写C code真不习惯sizeof()的问题
狠偷懒狠偷懒的一个测试ask a question about struct in C programming
is size_t recommended for 64-bit windows porting?What is size_t mean in C?
相关话题的讨论汇总
话题: struct话题: node话题: ports话题: unsigned话题: int
进入Programming版参与讨论
1 (共1页)
J*******i
发帖数: 2162
1
代码如下
#include
#include
struct Port {
char name[8];
};
struct Node {
char name[8];
uint32_t num_of_ports;
struct Port ports[0];
};
int main() {
struct Node x;
printf("size=%u, ptr(x)=%u, ports=%u, ptr(ports)=%u, "
"ptr(ports[0])=%u\n", sizeof(struct Node), (unsigned int)&x,
(unsigned int)x.ports, (unsigned int)&(x.ports),
(unsigned int)&(x.ports[0]));
return 0;
}
在这个Node里面有一个struct Port ports[0]的结构,用来动态的表示可变长度的一个
数组
我能够理解他指向的实际地址应该是&x+
t****t
发帖数: 6806
2
otherwise where should it point to?

【在 J*******i 的大作中提到】
: 代码如下
: #include
: #include
: struct Port {
: char name[8];
: };
: struct Node {
: char name[8];
: uint32_t num_of_ports;
: struct Port ports[0];

r******l
发帖数: 80
3

since it is array in the struct, the data is allocated as part of struct.
And (uint32_t)x.port will be treated as starting address of the array since
type of x.port is an array. Thus it is the same as &x.port

【在 J*******i 的大作中提到】
: 代码如下
: #include
: #include
: struct Port {
: char name[8];
: };
: struct Node {
: char name[8];
: uint32_t num_of_ports;
: struct Port ports[0];

h*********e
发帖数: 56
4
这根struct没关系啊。对任何表示数组的identifier A, A 和 &A 的值都是他的地址。
顺便说一句,port[0]根本没分配空间啊。Node大小12 (8个char,1个int)。
J*******i
发帖数: 2162
5
多谢各位的解释!现在理解了
s*****n
发帖数: 461
6
借贴问一个相同问题
我感觉见到的更多的是这样的结构来使用一段dynamic的内存:
struct node{
int i;
int length;
struct node * prev;
struct node * next;
unsigned char data[1];
}
我的问题是,为什么最后一行不写成 unsigned char data?
好像没有什么区别
还有,写成 char data[1]哪里不好?反正使用的时候都需要cast
X****r
发帖数: 3557
7
写成unsigned char data[1]的话就不用cast,data直接就可以当作
unsigned char *用,因为T []可以自动转换为T *。

【在 s*****n 的大作中提到】
: 借贴问一个相同问题
: 我感觉见到的更多的是这样的结构来使用一段dynamic的内存:
: struct node{
: int i;
: int length;
: struct node * prev;
: struct node * next;
: unsigned char data[1];
: }
: 我的问题是,为什么最后一行不写成 unsigned char data?

1 (共1页)
进入Programming版参与讨论
相关主题
What is size_t mean in C?问一道有关C++ (de)serialization的问题,谢谢!
定义的struct数组很大时,为什么会出现奇怪的大数字?写惯了C++ code,再写C code真不习惯
一个windows编程问题狠偷懒狠偷懒的一个测试
what's this mean in C program? ":" in identiferis size_t recommended for 64-bit windows porting?
C语言,结构体转字符串。简单的难题kafka produce to AWS
C: struct 里面一个CHAR, 一个INT, 这个STRUCT 占多少字节?fread/fwrite有big/small endian问题吗?
初学C,对什么该free一直搞不明白Array in C
请教一个结构体占内存大小的问题size不固定的struct怎么定义呀?
相关话题的讨论汇总
话题: struct话题: node话题: ports话题: unsigned话题: int