struct mystruct { int num; char *string; }; struct mystruct data = {10, "hello world"}; struct mystruct *p = &data; // p 指向结构体变量 data printf("%d %s\n", p->num, p->string); // 通过指针访问结构体成员,具体解释一下
时间: 2024-04-29 08:20:42 浏览: 7
这段代码定义了一个名为 `mystruct` 的结构体,包含了两个成员变量,一个是整型变量 `num`,另一个是字符指针 `string`。接着定义了一个名为 `data` 的结构体变量,将 `num` 初始化为 `10`, `string` 初始化为 `"hello world"`。然后又定义了一个名为 `p` 的结构体指针,将其指向结构体变量 `data`。最后使用 `p->num` 和 `p->string` 访问结构体成员 `num` 和 `string`,并将其打印出来。
这里用到了结构体指针的概念,结构体指针可以通过 `->` 运算符访问结构体成员,这相当于先解引用指针,再通过成员访问运算符访问结构体成员。因此,`p->num` 相当于 `(*p).num`, `p->string` 相当于 `(*p).string`。
相关问题
void func(struct MyStruct (*arr)[], int size)函数,怎么传入实参
在调用 `func` 函数时,我们可以通过以下方式传入结构体数组指针类型的实参:
```c
struct MyStruct myArr[10]; // 假设我们定义了一个结构体数组
func(&myArr, 10); // 传入结构体数组指针及数组大小
```
在这里,我们定义了一个名为 `myArr` 的结构体数组,然后通过 `&myArr` 取得了该数组的指针,将其作为第一个实参传入 `func` 函数中。第二个实参 `10` 表示数组的大小。
需要注意的是,在调用 `func` 函数时,我们需要使用取地址符 `&` 来获取结构体数组的指针。这是因为 `arr` 形参的类型是指向结构体数组指针的指针,也就是说,实参的类型需要与形参的类型保持一致。
C++中char*与struct如何互转
在C++中,可以通过以下方法将char*类型和struct类型进行互转:
1. 将struct类型转换为char*类型:
可以使用reinterpret_cast<char*>将struct类型的指针转换为char*类型的指针,如下:
```
struct MyStruct {
int num;
char str[10];
};
MyStruct s;
s.num = 123;
strcpy(s.str, "hello");
char* charPtr = reinterpret_cast<char*>(&s);
```
这样就可以将MyStruct类型的变量s转换为char*类型的指针charPtr了。
2. 将char*类型转换为struct类型:
可以使用reinterpret_cast将char*类型的指针转换为struct类型的指针,如下:
```
char* charPtr = ...; // 假设已经有了一个char*类型的指针
MyStruct* structPtr = reinterpret_cast<MyStruct*>(charPtr);
```
这样就可以将char*类型的指针charPtr转换为MyStruct类型的指针structPtr了。需要注意的是,转换后的指针指向的内存中应该是已经存储了MyStruct类型的数据。如果指向的内存中存储的数据类型与MyStruct类型不一致,可能会导致程序出现问题。