程序含义可以不看,只分析红体字部分
#ifndef DATATYPE_H_
#define DATATYPE_H_
typedef struct Ruler {
int len;
double start;
double step;
double stop;
} *Ruler_ptr, Ruler;
Ruler_ptr initRuler();
#endif /* DATATYPE_H_ */
/////////////////////////////////
// datatype.c
/////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include "datatype.h"
Ruler_ptr initRuler() {
Ruler_ptr rp;
// Ruler ruler; // 把malloc换成注释里边这两句,就会出现上述诡异错误
// rp = &ruler;
rp = (Ruler_ptr)malloc(sizeof(Ruler));//可知道,结构体定义后的, *Ruler_ptr,的含义是以后每次出现 Ruler_ptr就相当Ruler*;
rp->len = 10;
rp->start = 1.5;
rp->stop = 5.5;
rp->step = 1.2;
return rp;
}
/////////////////////////////////
// main.c
/////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include "datatype.h"
int main () {
Ruler_ptr rp;
rp = initRuler();
printf("%d\n", rp->len); // 同一个值print三遍,第一遍正确,后边就乱套了
printf("%d\n", rp->len);
printf("%d\n", rp->len);
return 0;
}
本文详细解析了C语言中结构体与指针的使用方法,通过具体示例介绍了如何定义结构体类型、创建结构体实例,并利用指针对结构体成员进行操作。文章还对比了直接使用变量与通过指针引用变量两种方式的不同效果。
442

被折叠的 条评论
为什么被折叠?



