C++学习 2 指针
指针:指针保存的是数据的地址;


#include<iostream>
using namespace std;
int main()
{
//1、定义指针
int a = 10;
//指针定义的语法:数据类型 * 指针变量名;
int * p;
//让指针记录变量a的地址
p = &a;
cout << "a的地址为:" << &a << endl;
cout << "指针p为:" << p << endl; //2、使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加 * 代表解引用,找到指针指向的内存中的数据
*p = 1000; //解引用指针p,找到p里的数据,并赋值1000
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;
return 0;
}
空指针:指针变量指向内存中编号为0的指针;
作用: 初始化指针变量;
注意: 空指针指向的内存是不可以访问的。0~255之间的内存编号是系统占用的,因此不可访问;
野指针:指针变量指向非法的内存空间;在程序中,应尽量避免使用野指针;

const修饰指针:
const修饰指针有三种情况:(左定值,右定向 )
1、const修饰指针 --- 常量指针 const在指针左侧,指针的值不可以修改,但指向可以修改。
eg: const int * p = &a;
*p = 20; // 错误,指针指向的值不可以修改
p = &b; // 正确,指针的指向可以修改

2、const修饰常量 --- 指针常量 const在指针右侧,指针的指向不可以修改,但值可以修改。
eg: int * const p = &a;
*p = 20; // 正确,指针指向的值可以修改
p = &b; // 错误,指针的指向不可以修改

3、const即修饰指针又修饰常量 指针的指向和指向的值都不可以改
eg: const int * const p = &a;
*p = 20; // 错误,指针指向的值不可以修改
p = &b; // 错误,指针的指向也不可以修改
指针和数组
作用:利用指针访问数组中的元素
#include<iostream>
using namespace std;
int main()
{ int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; cout << "第一个元素:" << arr[0] << endl; int * p = arr; //指向数组的指针,arr就是数组首地址
cout << "指针访问的第一个元素:" << *p << endl; p++; //指针向后偏移4个字节
cout << "指针访问的第二个元素:" << *p << endl; cout << "利用指针遍历数组" << endl; int * p2 = arr; for (int i = 0; i < 10; i++)
{
//cout << arr[i] << endl;
cout << *p2 << endl;
p2++;
} system("pause");
return 0;
}

指针和函数
#include<iostream>
using namespace std; void swap01(int a , int b) //值传递
{
int temp = a;
a = b;
b = temp; cout << "swap01 a=" << a << " " << "swap01 b=" << b << endl; //swap01 a=20,swap01 b=10形参发生改变
} void swap02(int * p1 , int * p2) //地址传递
{
int temp = *p1;
*p1 = *p2;
*p2 = temp; cout << "swap02 a=" << *p1 << " " << "swap02 b=" << *p2 << endl; //swap02 a=20,swap02 b=10形参发生改变
}
int main()
{
//指针和函数
int a = 10;
int b = 20; //1、值传递
//swap01(a, b);
//cout << "a=" << a <<" " << "b=" << b << endl; //值传递 a=10,b=20 实参不发生改变(不可修饰实参) //2、地址传递
swap02(&a, &b);
cout << "a=" << a << " " << "b=" << b << endl; //地址传递 a=20,b=10 实参发生改变(可修饰实参) system("pause");
return 0;
}
C++学习 2 指针的更多相关文章
- (转) 学习C++ -> 指针初步
学习C++ -> 指针初步 一.指针 1. 什么是指针? 我们知道, 计算机的内存是由一个个独立的存储单元组成, 并且系统会对每一个存储单元分配一个唯一的号码, 称为这个存储 ...
- C++学习之指针的常见错误
C++学习之指针的常见错误 我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程 ...
- c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...
- 【C++】初次学习C++指针时的一些易混或疑惑的地方
C++中的指针是一个比较复杂的知识概念,最近我有在学习这一方面的知识,就借此文章记录一下在学习时容易产生的混淆.本人初次发技术类的分享,可能会有纰漏,欢迎诸位指正^_^! 1.*在两种语境下的含义 先 ...
- 我的c++学习(12)指针作为函数参数
◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. ...
- 我的c++学习(9)指针
◆ 1.指针变量的赋值.初始化与简单应用 ,y; y=; // y可以理解成该存储单元的当前名字 int *ip; // ip是一个指针(变量) ip=&y; // ip是存储空间y的地址 c ...
- C++学习笔记 指针与引用
指针与引用 1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...
- C/C++学习笔记----指针的理解
指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能 ...
- golang学习之指针、内存分配
func pointer_test() { //空指针,输出为nil var p *int fmt.Printf("p: %v\n", p) //指向局部变量,变量值初始为0 va ...
- C学习之指针强化
char *p = (char *)malloc(100); malloc是用于分配内存的函数,它的参数为int型,表示分配多少个字节长度,其返回类型为void*,在这里用char*就是强制转化,指定 ...
随机推荐
- redis《三》连接池配置参数
参数 值 setTestWhileIdle() 在空闲时检查有效性 true setMinEvictableIdleTimeMillis() 连接最小空闲时间 1800000L setTimeBetw ...
- 分布式协调组件Zookeeper之 选举机制与ZAB协议
Zookeeper简介: Zookeeper是什么: Zookeeper 是⼀个分布式协调服务的开源框架. 主要⽤来解决分布式集群中应⽤系统的⼀致性问题, 例如怎样避免同时操作同⼀数据造成脏读的问题. ...
- 日常shell练习
2021-07-19 1.echo的使用 1.1 echo -n 表示不换行输出 # echo输出会自动换行,换行输出两个1 echo 1 echo 1 # 不换行输出,不换行输出两个1 echo - ...
- Qt5创建模态和非模态对话框
1.模态对话框创建: 第一种方法: QDialog dialog(this); dialog.exec(); this为该对话框的父窗口. 第二种方法: QDialog *dialog = new Q ...
- C#使用异步需要注意的几个问题
C#异步使用需要注意的几个问题1.异步方法如果只是对别的方法的简单的转发调用,没哟复杂的逻辑(比如等待A的结果,再调用B,等待A调用的返回值拿到内部做一些处理再返回),那么就可以去掉async关键字. ...
- golang GC 垃圾回收机制
垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行. Golang中的垃圾回收主要应用三色标记法, ...
- Django+Ansible构建任务中心思路
Ansible作为老牌的自动化运维工具,由Python开发,应用广泛,但其默认只提供了命令行下的使用方式,好在提供有完善的API支持二次开发,可以很方便的集成到我们的自动化运维系统中 最近一个朋友跳槽 ...
- k8s 存活探针(健康检查)
重启策略 (RestartPolicy ) Always:当容器终止退出后,总是重启容器,默认策略. OnFailure:当容器异常退出(退出状态码非0)时,才重启容器. Never:当容器终止退出, ...
- Python - 通过PyYaml库操作YAML文件
PyYaml简单介绍 Python的PyYAML模块是Python的YAML解析器和生成器 它有个版本分水岭,就是5.1 读取YAML5.1之前的读取方法 def read_yaml(self, pa ...
- GoLang设计模式05 - 原型模式
原型模式也是一种创建型模式,它可以帮助我们优雅地创建对象的拷贝.在这种设计模式里面,将克隆某个对象的职责交给了要被克隆的这个对象.被克隆的对象需要提供一个clone()方法.通过这个方法可以返回该对象 ...