Skip to content
Word Count: 451 | Expected Read Time: 1 min

APS105预习 - 10

Chapter 12 Data Structure 数据结构

在C中,数据结构是一种使用相同变量名存储不同类型数据的办法,也叫结构体

12.1 声明

我们可以通过如下代码声明一个数据结构:

1
2
3
4
5
6
7
8
9
10
struct Neuron{
int neuronNum;
double input1, input2;
char areaName[20];
};

int main(void){
struct Neuron neuron;
return 0;
}

也可以在定义的同时声明一个该类型的变量:

1
2
3
4
5
struct Neuron{
int neuronNum;
double input1, input2;
char areaName[20];
} n;

可以使用.点运算符,访问数据结构的成员,就像其他语言中访问对象的属性一样!

初始化

使用大括号可以在定义时对结构体进行初始化

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

struct Neuron {
int neuronNum;
double input1, input2;
char areaName[20];
} globalNeuron = {1, 9.1, 8.3, "Frontal Lobe"};

int main(void) {
struct Neuron neuron = {3, 90, 23, "Frontal Cortex"};
return 0;
}

我懒

每次声明变量都写一长段struct ...未免有些繁琐,所以,在C语言中,可以使用typedef为任何数据类型创建别名,其原型为

1
typedef <existing_data_type> <new_data_type_name>;

上述的代码便可以通过typedef简化

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

struct Neuron {
int neuronNum;
double input1, input2;
char areaName[20];
};

typedef struct Neuron Neuron;

int main(void){
Neuron n;
}

或者究极简化

1
2
3
4
5
typedef struct Neuron {
int neuronNum;
double input1, input2;
char areaName[20];
} Neuron;

12.2 指向结构体的指针

可以通过以下代码定义一个指向结构体的指针

1
2
Neuron n = {"Max", 1};
Neuron *pNeuron = &n;

通过指针访问结构体成员

除了解引用之后访问成员,还可以使用箭头运算符来访问

1
2
pNeuron->name = "123";
(*pNeuron).name = "123"; //equivalent

关于内存管理

free()函数必须接受一个malloc,callocrealloc返回的指针,切不可传入其他指针。

malloc返回的指针进行加减后传入free将会导致未定义行为!!!!!

About this Post

This post is written by Jinyuan Zhou, licensed under CC BY-NC 4.0.

#APS105 #C/C++ #预习 #笔记