typedef的使用
在我们使用结构体的时候比如:struct student s要打一大串字符,感觉特别的繁琐。那么
typedef其实主要作用就是起别名,方便我们使用变量和看懂程序
#include<stdio.h>
//定义结构体的别名
typedef struct student {
int num;
char name[20];
char sex;
}stu, * pstu;
typedef int Integer;//定义int的别名
int main() {
stu s = { 1001,"xiaoming",'M'};
printf("%d %s %c\n", s.num, s.name, s.sex);
pstu p = &s;//等同于stu* p;
printf("p->num=%d\n",p->num);
Integer i = 5;
printf("i=%d", i);
}
可以看到结构体经过typedef 使用起来方便了不少。同时int经过起别名也照样可以正常使用。
我们还记得讲malloc中,malloc函数传入的形参是size_t吗?
其实它就是经过typedef转化而来的。
那么为什么都是int要其那么多不同的别名呢?
其实这有助于别人看懂我们的程序,因为size_t就是字节的意思,而malloc中的参数就是字节。
C++引用
我们把int &a,这样把&放在前面的形式叫做引用(其实就是让这个传过去的实参换了个名字)。
C的学习为什么要讲C++呢?因为后面就要学习数据结构了,而数据结构是经常使用引用的。
其实引用就跟我们使用指针传递一个道理
指针传递https://blog.csdn.net/Zcymatics/article/details/123079868
不过它经过封装,使用起来更加方便简单。
下面说一个程序就明白了。
#include<stdio.h>
void change(int& a) {
++a;
}
int main() {
int i = 5;
change(i);
printf("i=%d", i);
}
如果我们用C实现的话就会没那么方便,程序如下
#include<stdio.h>
void change(int* a) {
++(*a);
}
int main() {
int i = 5;
change(&i);
printf("i=%d", i);
}
同样实现了i+1,C++的引用很明显简单很多。
有人说这有什么加一点字符就完事了,但是当使用到指针的时候就可以看出差距了
程序如下:
C++写法
#include<stdio.h>
#include<malloc.h>
void modify(int* &q) {
q = (int*)malloc(5);
q[0] = 10;
}
int main() {
int* p;
modify(p);
printf("p[0]=%d", p[0]);
}
C语言写法
#include<stdio.h>
#include<malloc.h>
void modify(int**q) {
*q = (int*)malloc(5);
*q[0] = 10;
}
int main() {
int* p = NULL;
modify(&p);
printf("p[0]=%d", p[0]);
}
这样看下来是不是方便很多呢?
从上述两个例子我们可以对引用进行总结:
1.引用是C++的,使用引用传参操作时形参的类型和实参的类型一致。
例如
可以看到,圈住的地方也就是形参的类型和实参的类型都是一样的
2.引用其实就是换名字,我们学C传参改变值时是先取地址再传参。
而C++引用是传进去系统帮你取地址操作,然后把地址赋给形参,也就是对同一个地址进行操作(相当于换名字)。