ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-03-02 12:35:20  阅读:214  来源: 互联网

标签:typedef -- C++ Day14 int 引用 printf include


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

在这里插入图片描述

标签:typedef,--,C++,Day14,int,引用,printf,include
来源: https://blog.csdn.net/Zcymatics/article/details/123212537

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有