首页 > 其他分享 >学习日记---第4天(0基础 3min 指针快速入门)

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

时间:2024-11-17 18:44:26浏览次数:3  
标签:输出 函数 10 int --- 3min printf 指针

笔记复习

1.函数声明11

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

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

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,int,---,3min,printf,指针
From: https://blog.csdn.net/wlyyywwq/article/details/143826545

相关文章

  • 学习日记---第三天
    今天被头歌上面的python题难住了,一题写了两个半小时,也许是坤坤在发力吧...笔记复习1.利用sizeof确定数据类型的大小,即所占的字节语法:sizeof(变量名)示例:intarr[]={4,2,8,0,5,7,1,3,9};a=sizeof(arr)/sizeof(arr[0]);//sizeof(arr)用于计算整个数组的大小,sizeof(......
  • 学习日记---第2天
    笔记复习1.数组数据是一个集合,里面存放了相同类型的元素定义方法有三种:a.数据类型数组名[数组长度];arr[元素位置]=值;b.数据类型数组名[数组长度]={值1,值2...};c.数据类型数组名[]={值1,值2...}示例://第一种#include<iostream>usingnamespacestd;intmain()......
  • 双非本 大一的蓝桥杯c++组备赛日记----普通人的极限在哪里?
    本文创作灵感:从开学到现在,刷到许许多多的让人热血沸腾、心生向往的视频,大都是MIT精致生活,清北狂人此类的。刷多之后心中躁动,跃跃欲试,可又知自己能力有限,面对神仙般的人物只能望其项背,每日累得吐血,但成效低微,心中茫然不已。又恰逢手贱误删文件,导致重新装了一遍vs。本人之前看的......
  • 20222323 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容(1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式该域名对应IP地址IP地址注册人及联系方式IP地址所在国家、城市和具体地理位置(2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体......
  • 学期2024-2025-1 学号20241317 《计算机基础与程序设计》第八周学习总结
    学期2024-2025-1学号20241317《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上具体......
  • 赣CTF-Misc方向wp
    checkin下载附件,一张图片,拖进010,在文件尾看到隐藏文本,提取并用社会主义价值解密ez_forensics提示为结合题目进行想象,我们会想到取证第一步vc挂载,但是需要密码,研究图片,lsb隐写,在row:G通道找到密钥挂载,得到flag真的是base64哦考点base64隐写点击查看代码importbase64......
  • 【原创】PREEMPT-RT 系统cpu使用率周期飙高问题
    PREEMPT-RT系统某些应用场景syscpu使用率周期CPU飙高问题目录PREEMPT-RT系统某些应用场景syscpu使用率周期CPU飙高问题背景现象复现条件原因解决措施背景在22年进行PREEMPT-RT系统问题的调试时,之前文章在CPU性能优化小记-使用火焰图定位性能问题只是定位解决了其中一个问题,还......
  • 2024-2025-1 20241403 《计算机基础与程序设计》第八周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第八周作业)这个作业的目标功能......
  • request to https://registry.npm.taobao.org/ant-design-vue failed, reason: ce
     一、原因分析其实早在2021年,淘宝就发文称,npm淘宝镜像已经从http://registry.npm.taobao.org切换到了http://registry.npmmirror.com。旧域名也将于2022年5月31日停止服务(直到HTTPS证书到期才真正不能用了)2024年1月22日,淘宝原镜像域名(http:/......
  • 7-Zip 和 WinRAR 的对比分析,按不同的特性进行表格化:
    7-Zip和WinRAR的对比分析,按不同的特性进行表格化:特性7-ZipWinRAR开发公司7-Zip由IgorPavlov开发WinRAR由RARLab开发支持的格式支持7z,ZIP,RAR,TAR,GZ,ISO等支持RAR,ZIP,TAR,GZ,ISO等压缩比率通常提供更高的压缩比率(尤其是7z格式)......