学习日记---第4天(0基础 3min 指针快速入门)

笔记复习

1.函数声明

语法:函数返回值类型 函数名 参数列表

作用:告诉编译器在这个地方已经定义了函数,这样编译器可以在这个定义的后面调用函数,即使函数的定义在调用之后(具体的函数定义还是要写的)

ps:函数的声明可以有多个,但函数的实现只能有一个

示例:利用函数实现连两个数的和

#include<iostream>
using namespace std;

int max(int a, int b);#函数的声明

int main() {
	int a = 10;
	int b = 20;
	cout << max(a, b) << endl;
	return 0;
}

int max(int a, int b) {#函数的定义
	return a < b ? a : b;#三目运算符,判断a<b,若为True则返回a,否则返回b
}

2.分文件编写

学习了函数之后我们知道可以将代码的功能分为不同的多个函数模块,当这些模块中的代码太多时会导致代码整体很难看,因此将函数模块放到其他文件中,只在主文件进行调用的操作

示例:

创建三个文件,一个头文件两个源文件,分别命名为:坤坤.cpp,鸡泥.h,太美.cpp,其中坤坤.cpp源文件用来调用函数,头文件用来写函数声明,另一个源文件用来写函数定义,下面是各个文件的代码,利用函数实现两个数交换

鸡泥.h

#pragma once#用来防止头文件被重复包含,如果头文件被重复包含,可能会出问题
#具体出什么问题我不清楚,之前重复包含的时候代码是直接报错的
void swap(int a, int b);#函数声明

太美.cpp

#include"鸡泥.h"
#include<iostream>
using namespace std;

void swap(int a, int b) {#函数定义
	int temp = a;
	a = b;
	b = temp;

	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
}

坤坤.cpp

#include<iostream>
#include"鸡泥.h"
using namespace std;

int main() {
	int a = 10;
	int b = 20;

	swap(a, b);
	return 0;
}

3.格式化输出函数printf(新学的)

c++中当我们想要输出一个数据的时候,往往是采用cout输出,但这种输出方式的缺点是不能控制输出的格式,例如小数需要保留几位这样的问题,因此便有了printf格式化输出函数

语法:

printf(格式控制字符串,输出值参数表)

格式控制字符串在双引号中,包括三类:

a.格式字符:控制输出数据的格式,整数,实数等

b.转义字符:例如\n,\r等,前者用于将鼠标光标移动到下一行;后者用于将鼠标光标移动到改行的起始位置,当开始输出时会覆盖之前输出的内容

c.普通字符:即你想要输出的数据的变量名

输出值参数列表:类似于函数的参数列表,让编译器知道你想输出的数据是什么

示例:

#include<iostream>
using namespace std;

int main() {
	int a = 10;
	printf("a=%a\na=%a",a);
#a=%a表示a用十六进制输出,末尾的a为参数列表
	return 0;
}

常见的格式字符:

1)%d:输出带符号的十进制整数,正数的符号不输出。 

int a = 10;
printf("%d", a);

还可以在%和格式字符中间插入格式修饰符(数字),用于指定输出数据的宽度(所占的格数),如用“%5d”,指定输出数据占5格,输出的数据在宽度内默认向右对齐,需要向左对齐则在数字前面加负号,不足的用空格。 

int a = 10;
printf("%5d", a);

 

如图,此处10前面有3个空格 

2)%f格式符:输出一个实数(包括单精度、双精度、长双精度),以小数形式输出。

两种使用方法,一种是不指定输出的小数位数,那么编译器会默认整数部分全部输出,小数部分(无论什么数据类型)只输出六位;另一种是指定输出小数的位数。

指定输出小数的位数:%m.nf(m表示占多少格,n表示要输出多少位小数)

double a = 10;
printf("%12.12f", a/3);

 输出结果:

注意:当使用%f格式化输出时,必须要传入一个浮点数。错误代码及输出结果如下:

int a = 10;
printf("%12.12f", a/3);

 3)%c格式符:用于输出一个字符

char b = 'k';
printf("%c\n", b);

 4)%s格式符:用于输出一段字符串

string b = "kun";
printf("%s\n", b);

但这样的代码是错误的,printf是C语言的标准库函数,它期望接收的是C风格的字符串,而不是string,故需要用c_str()方法,返回一个指向c语言风格字符串的指针(不懂没关系,会用就行)

语法:变量名.c_str()

string b = "kun";
printf("%s\n", b.c_str());

 printf函数还有其他格式字符,不过这个我没学,之前上黑马的程序也没有讲,在这里提出的目的是为下面讲指针铺垫。

4.指针

指针是一个特殊的变量,用来存储数据在内存中的地址(可以将数据理解为二维直角坐标系上的点,地址就是他的坐标)

作用:1.访问和修改内存地址       2.动态内存管理       3.函数参数传递等

在学习指针之前需要了解两个有关地址的操作:取址和解引用

a.取址:利用到取址符&,得到当前变量的地址

语法:&变量名(下面代码只看取址符部分)

int a = 10;
int* p;
p = &a;#使用取址符&加上变量名可以得到该变量即对应的值在内存中的地址
cout << "a的地址为" << &a << endl;
cout << "指针p为:" << p << endl;

*p = 100;
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;

 b.解引用

前面得到了a的地址并把它赋给p,那么问题来了,此时输出p只会输出a的地址,那么如何输出a的值呢?这就是解引用的操作,用于得到地址所指向的数据

语法:*变量名

int a = 10;
int* p;
p = &a;
cout << "a的地址为" << &a << endl;
cout << "指针p为:" << p << endl;

*p = 100;#通过*解引用p,得到p存储的地址所对应的数据,并对其进行修改
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;

 接下来我们开始正式讲指针

语法:数据类型*变量名

int* p;

如此我们便定义了一个指针,但是这个指针目前没有存储任何地址,只是一个空指针

​
int a = 10;
int* p;
p = &a;#将a的地址赋给p,此时p指针存储了a的地址
cout << "a的地址为" << &a << endl;
cout << "指针p为:" << p << endl;

*p = 100;
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;

​

 注意:指针不能在定义的同时传入地址!!

如此我们便学会了指针,指针主要的作用还是前面三个,这大概在第15天的学习日记里会有介绍,想要深入了解的朋友请移步其他文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值