sizeof结构体指针
时间: 2023-09-02 13:11:56 浏览: 48
在C语言中,sizeof操作符用于获取一个变量或数据类型所占用的存储空间大小,单位为字节。当对一个结构体指针使用sizeof操作符时,会返回该指针所占用的存储空间大小,而不是所指向的结构体所占用的存储空间大小。
例如,假设有如下的结构体定义:
```
struct Person {
char name[20];
int age;
float height;
};
```
那么,定义一个指向该结构体的指针可以这样写:
```
struct Person *p;
```
对于该指针,使用sizeof操作符会返回该指针所占用的存储空间大小,通常是4或8字节(取决于编译器和操作系统的位数)。而如果要获取该指针所指向的结构体所占用的存储空间大小,可以使用sizeof操作符和解引用运算符:
```
sizeof(*p)
```
这将返回该结构体所占用的存储空间大小,即24字节(假设int占用4字节,float占用4字节,且指针占用8字节)。
相关问题
sizeof计算结构体指针大小
sizeof是C/C++中的一个运算符,用于计算数据类型或变量的大小(以字节为单位)。当计算结构体指针的大小时,sizeof返回的是指针本身的大小,而不是指针所指向的结构体的大小。
例如,如果有一个结构体定义如下:
```c
struct MyStruct {
int a;
char b;
float c;
};
```
那么计算结构体指针的大小可以使用sizeof运算符:
```c
size_t size = sizeof(struct MyStruct*);
```
这里的size将会是指针的大小,通常是4个字节或8个字节(取决于操作系统和编译器的位数)。
a结构体指针指向b结构体指针
在C语言中,可以使用结构体指针来指向另一个结构体指针。这样做可以方便地访问和操作结构体成员。
假设有以下两个结构体定义:
```c
typedef struct {
int x;
int y;
} StructA;
typedef struct {
float a;
float b;
StructA* ptr;
} StructB;
```
我们可以创建一个StructA类型的对象a,并将其地址赋值给StructB类型的指针对象b的ptr成员,如下所示:
```c
StructA a;
StructB* b = malloc(sizeof(StructB));
b->ptr = &a;
```
现在,我们可以通过结构体指针b来访问和修改a的成员:
```c
b->ptr->x = 10;
b->ptr->y = 20;
```