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*就是强制转化,指定 ...
随机推荐
- 我对数据库关系代数中减法sql实现的思考:mysql脚本
一.创建数据库,创建表结构 CREATE DATABASE Test_sub DEFAULT CHARACTER SET utf8; USE Test_sub; CREATE TABLE studen ...
- Flink与Strom两个框架的对比分析
一.Flink与Storm两个框架的对比 二.Flink 的特性 1.高吞吐.低延迟.高性能 2.支持带事件的窗口(window) 操作:time.count.session.data-driven ...
- 理解ASP.NET Core - [02] Middleware
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 中间件 先借用微软官方文档的一张图: 可以看到,中间件实际上是一种配置在HTTP请求管道中,用 ...
- Qt5之事件学习总结
首先要明白一个概念,事件和信号并不一样,比如单击一下鼠标,就会产生鼠标事件(QMouseEvent),是对这个动作的描述,而因为按钮被按下了,按钮会发出clicked()的单击信号(是按钮控件产生的) ...
- Django图片上传和前端展示
1 - 模型 class Book(models.Model): #定义图书模型 book_name = models.CharField(max_length=100,verbose_name='书 ...
- openswan协商流程之(七):main_inR3
主模式第六包(收包):main_inR3 1. 序言 main_inR3()函数是ISAKMP协商过程中第一阶段的最后一个报文的接收处理函数,它的作用同main_inI3_outR3()部分功能相同: ...
- 依赖注入Bean属性——手动装配Bean
一.构造方法注入 其中,可以根据不同的参数列表调用不同的重载的构造方法: 其中,基本数据类型没有包,引用类型都有包路径,基本类型对应封装类: 二.通过property标签调用类的set方法注入 三.通 ...
- shell编程之条件语句
目录: 一.条件测试 1.test命令测试 2.文件测试 3.字符串比较 4.逻辑测试 二.if语句 1.if单分支语句 2.if双分支语句 3.if多分支语句 三.case语句 case多分支语句 ...
- Weblogic Coherence组件漏洞初探CVE-2020-2555
Weblogic Coherence组件漏洞初探CVE-2020-2555 2020年1月,互联网上爆出了weblogic反序列化远程命令执行漏洞(CVE-2020-2555),Oracle Fusi ...
- WPF 第三方资源
1.XCeed 开发的Extended WPF Toolkit http://wpftoolkit.codeplex.com/ http://www.csdn123.com/html/blogs/20 ...