指针:指针保存的是数据的地址;

#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 指针的更多相关文章

  1. (转) 学习C++ -> 指针初步

    学习C++ -> 指针初步 一.指针    1. 什么是指针?        我们知道, 计算机的内存是由一个个独立的存储单元组成, 并且系统会对每一个存储单元分配一个唯一的号码, 称为这个存储 ...

  2. C++学习之指针的常见错误

    C++学习之指针的常见错误       我们在编程的过程中,有时候在使用指针的时候,删除一个指针以后一定要将这个指针设置为空指针,这是因为删除这个指针只是删除这个指针指向的地址,这个指针还真是的存在程 ...

  3. c语言学习笔记 - 指针和字符串

    前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...

  4. 【C++】初次学习C++指针时的一些易混或疑惑的地方

    C++中的指针是一个比较复杂的知识概念,最近我有在学习这一方面的知识,就借此文章记录一下在学习时容易产生的混淆.本人初次发技术类的分享,可能会有纰漏,欢迎诸位指正^_^! 1.*在两种语境下的含义 先 ...

  5. 我的c++学习(12)指针作为函数参数

    ◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. ...

  6. 我的c++学习(9)指针

    ◆ 1.指针变量的赋值.初始化与简单应用 ,y; y=; // y可以理解成该存储单元的当前名字 int *ip; // ip是一个指针(变量) ip=&y; // ip是存储空间y的地址 c ...

  7. C++学习笔记 指针与引用

    指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其 ...

  8. C/C++学习笔记----指针的理解

    指针是C/C++编程中的重要概念之一,也是最容易产生困惑并导致程序出错的问题之一.利用指针编程可以表示各种数据结构,通过指针可使用主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯:指针能 ...

  9. golang学习之指针、内存分配

    func pointer_test() { //空指针,输出为nil var p *int fmt.Printf("p: %v\n", p) //指向局部变量,变量值初始为0 va ...

  10. C学习之指针强化

    char *p = (char *)malloc(100); malloc是用于分配内存的函数,它的参数为int型,表示分配多少个字节长度,其返回类型为void*,在这里用char*就是强制转化,指定 ...

随机推荐

  1. RabbitMq内存分页

  2. 1day漏洞反推技巧实战(2)

    学习存货(2) CVE-2018-11784简单分析之反推的魅力 看着挺有趣的,简单分析下: 通过搜索tomcat漏洞找到: http://tomcat.apache.org/security-7.h ...

  3. SpringBoot笔记(6)

    一.数据访问(SQL) 1.数据源的自动配置-HikariDataSource 1.导入JDBC场景 <dependency> <groupId>org.springframe ...

  4. thinkphp5.x在函数禁用的情况下绕过

    描述 测试的时候发现一个thinkphp的网站,有tp5的漏洞但无法执行命令,但没机会进行后续测试,所有在这里自己搭建环境进行复现一下. 使用的是tp5.0.16 一开始使用网上的payload打一直 ...

  5. SSL基础知识及Nginx/Tomcat配置SSL

    HTTPS 是在 HTTPS 基础之上添加 SSL/TLS 使网络通讯加密,进而确保通信安全.可简记为 HTTPS = HTTP + SSL/TLS 本文档主要讲解常规SSL格式.Nginx 与 To ...

  6. 聚类算法与K-means实现

    聚类算法与K-means实现 一.聚类算法的数学描述: 区别于监督学习的算法(回归,分类,预测等),无监督学习就是指训练样本的 label 未知,只能通过对无标记的训练样本的学习来揭示数据的内在规律和 ...

  7. Docker之Alpine制作jre镜像(瘦身)+自定义镜像上传阿里云

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...

  8. Linux proc文件系统小记

    序言: 当linux系统存在多个网口时(也可以是一个网口配置两个IP),每个网口配置不同的IP地址,并且分别连接到不同的电脑上,电脑分别配置与相连的网口统一网段的IP且将电脑网关设置为linux的网口 ...

  9. Model 特性

    表 1 AssociatedMetadataTypeTypeDescriptionProvider 通过添加在关联类中定义的特性和属性信息,从而扩展某个类的元数据信息. AssociationAttr ...

  10. [CVE-2020-1956] Apache Kylin远程命令执行漏洞复现

    Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区. ...