5.指针总结

5.1 指针的定义和使用

#include<iostream>
using namespace std;
/* 
5.指针总结  *操作符指向内存,&取地址
 */

int main()
{
	int a = 15;
	//定义
	int *p = NULL;
	//取地址给指针
	p = &a;
	//*取值
	cout<<"指针的地址:"<<p<<endl;
	cout<<"取内容:"<<*p<<endl;
	
	if(p != NULL)
	{
		p = NULL;
	}
	cout<<"指针的地址:"<<p<<endl;
	return 0;
}

5.2 指针的大小

32位系统:4字节,64位操作系统:8字节
sizeof()测的是指向指针存储地址的大小。

5.3 野指针、空指针、万能指针

  • 野指针
    指针也是一种变量,可以赋值,当指针指向区域未知时,本身不会直接引发错误;但是操作野指针指向的内存区域才会出问题。
  • 空指针
    int *p = NULL; 它是一个值为 0 的宏常量。
  • 万能指针
    void* 可以指向任何变量的内存空间。
    指向变量时最好限定指针为void*
    例如:
#include<iostream>
using namespace std;
/* 
5.野指针、空指针和万能指针
 */
int main()
{
	void *p = NULL;
	int a = 0;
	//指向变量时最好转为void*
	p = (void*)&a;
	//指向内存时转换为 int*
	*(int*)p = 15;
	cout<< a<<endl;
	return 0;
}

5.4 const修饰的指针变量(结合方向)

#include<iostream>
using namespace std;
/* 
5.4 const修饰的指针变量
 */
int main()
{
	int a = 99;
	int b = 89;
	const int* p = &a;  //不能通过指针修改内存的值。 指向常量的指针。
	a = 22;
	cout<<a;
	
	/* 指针常量 */
	int* const p1 = &b;
	// p = &a;  //不能修改指针的指向
	return 0;
}

5.5 引用

  • 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
  • C++ 引用 vs 指针
    引用很容易与指针混淆,它们之间有三个主要的不同:
  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。
int&  r = i;
double& s = d;

5.5.1 引用作为函数参数

#include <iostream>
using namespace std;
 
// 函数声明
void swap(int& x, int& y);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
 
   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;
 
   /* 调用函数来交换值 */
   swap(a, b);
 
   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;
 
   return 0;
}
 
// 函数定义
void swap(int& x, int& y)
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y  */
  
   return;
}

5.5.2 引用作为函数返回值

-引用的返回相当于一个隐式的指针, 静态变量引用会有返回值,对全局或者静态变量的引用才是安全的,局部变量引用返回会出问题。

int& func() {
   int q;
   //! return q; // 在编译时发生错误
   static int x;
   return x;     // 安全,x 在函数作用域外依然是有效的
}

5.5.3 获取当前系统日期和时间

//补充自:https://www.runoob.com/cplusplus/cpp-date-time.html
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
   // 基于当前系统的当前日期/时间
   time_t now = time(0);
   
   // 把 now 转换为字符串形式
   char* dt = ctime(&now);
 
   cout << "本地日期和时间:" << dt << endl;
 
   // 把 now 转换为 tm 结构
   tm *gmtm = gmtime(&now);
   dt = asctime(gmtm);
   cout << "UTC 日期和时间:"<< dt << endl;
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值