结构体、typedef、C++引用
回顾C语言中结构体的使用方法。
结构体定义和初始化
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
struct student {
int num;
char name[20];
char sex;
}; //不要忘记分号
int main(){
struct student s = {10,"elwood",'m'}; //初始化
cout << s.num << endl;
cout << s.name << endl;
cout<< s.sex << endl;
return 0;
}
结构体所占用空间不是单个成员所占空间的总和,因为存在对齐,对齐可以提高CPU访问内存的效率。
结构体指针
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
struct student {
int num;
char name[20];
char sex;
};
int main(){
struct student s = {10,"elwood",'m'};
struct student* ptr = &s;
cout << s.num << ' ' << ptr->num << endl;
cout << s.name << ' ' << ptr->name << endl;
cout<< s.sex << ' ' << ptr->sex << endl;
return 0;
}
以上两种输出方法,所得的结果相同。.
和->
都被称为成员选择运算符,其区别在于,.
运算符对对象使用,而->
对指针使用。
对于结构体s,使用下列方法输出成员的值是错误的:
cout << *ptr.num << endl; //错误
其原因是,
.
运算符的优先级高于*
。因此不能对指针使用.
运算符。如果一定要使用,下列方法是正确的:
cout << (*ptr).num << endl; //正确
typedef关键字
typedef struct student {
int num;
char name[20];
char sex;
} stu, *pstu;
用这种方法定义结构体,声明时的格式有所变化:
stu s = {10, "elwood", 'm'};
pstu ptr = &s;
使用 typedef
的原因是实现代码即注释,方便理解代码
C++引用
#include <iostream>
#include <cstdlib>
using namespace std;
void modifyNum(int &a){
++a;
}
void modifyPtr(int *&p){
p = (int*)malloc(20);
p[0] = 5;
}
int main(){
int a = 10;
modifyNum(a);
cout << a;
int *p = nullptr;
modifyPtr(p);
return 0;
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。