在我们使用结构体的时候比如: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中的参数就是字节。
我们把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++引用是传进去系统帮你取地址操作。