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 | |
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?
|