C/C++教程

嘉明的C学习之Day14--typedef的使用、C++引用

本文主要是介绍嘉明的C学习之Day14--typedef的使用、C++引用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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++引用是传进去系统帮你取地址操作。

在这里插入图片描述

这篇关于嘉明的C学习之Day14--typedef的使用、C++引用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!