共翁号
共翁号 > 科普 > 结构体指针如何定义和使用

结构体指针如何定义和使用

原创2025-06-20 14:21:48

结构体指针的定义和使用如下:

定义结构体指针

结构体指针的定义形式一般为:

```c

struct 结构体名 *变量名;

```

例如,定义一个指向结构体 `stu` 的指针变量 `pstu`:

```c

struct stu {

char *name; // 姓名

int num; // 学号

int age; // 年龄

char group; // 所在小组

float score; // 成绩

} stu1 = { "Tom", 12, 18, 'A', 136.5 };

struct stu *pstu = &stu1;

```

或者可以在定义结构体的同时定义结构体指针:

```c

struct stu {

char *name; // 姓名

int num; // 学号

int age; // 年龄

char group; // 所在小组

float score; // 成绩

} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;

```

使用结构体指针

访问结构体成员

通过结构体指针访问结构体成员有两种形式:

`(*pointer).memberName`

`pointer->memberName`

第一种写法中,`.` 的优先级高于 `*`,因此 `(*pointer)` 两边的括号不能少。如果去掉括号写作 `*pointer.memberName` 是错误的。

例如:

```c

struct num {

int i;

float j;

};

struct num *p = &num1;

p->i = 10; // 通过指针访问结构体成员

printf("num1.i=%d\n", num1.i); // 输出: num1.i=10

printf("num1.j=%f\n", num1.j); // 输出: num1.j=0.1

```

传递结构体变量的地址给函数

结构体指针可以用于传递结构体变量的地址给函数,这样函数内部可以直接操作结构体变量。

例如:

```c

void study_c(struct num *p) {

p->i = 10;

p->j = 0.1;

printf("num1.i=%d\n", p->i);

printf("num1.j=%f\n", p->j);

}

int main() {

struct num num1;

struct num *p = &num1;

study_c(p);

return 0;

}

```

存储另一个结构体变量的地址

结构体指针可以存储另一个结构体变量的地址,从而创建链表结构。

例如:

```c

typedef struct {

int *base;

int *top;

int stacksize;

} sqstack;

sqstack *stack = (sqstack *)malloc(sizeof(sqstack));

stack->base = (int *)malloc(100 * sizeof(int));

stack->top = stack->base;

stack->stacksize = 100;

```

注意事项

结构体指针必须指向一个确定的结构体变量 ,如:`p = &a;`

通过结构体变量的指针访问结构体的方法为:

`a.num`, `(*p).num`, `p->num`

示例代码

```c

include

include

struct num {

int i;

float j;

};

void study_c(struct num *p) {

p->i = 10;

p->j = 0.1;

printf("num1.i=%d\n", p->i);

printf("num1.j=%f\n", p->j);

}

int main() {

struct num num1;

struct num *p = &num1;

study_c(p);

struct Test {

int a;

char ch;

};

struct Test t;

struct Test *p2 = &t;

返回:科普

相关阅读

    最新文章
    猜您喜欢
    热门阅读