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

#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. Mybatis中多表联查,查询出来的字段出现重名,造成数据异常的解决方法!

    在做一对多出现的问题,引发的思考:当数据库表中,主表的主键id和明细表的中的字段名相同时怎么办?Mybatis进行自动映射赋值的时候会不会出现异常?                      注意:M ...

  2. springboot全局异常封装案例

    @ControllerAdvice三个场景:>https://www.cnblogs.com/lenve/p/10748453.html 全局异常处理 全局数据绑定 全局数据预处理 首先定义一个 ...

  3. js与jquery获取input输入框中的值

    如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML 一.jquery获取input文本框中的值 通过 ...

  4. MySQL-SQL基础-查询1

    #子查询-某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就要用到子查询.用于子查询的关键字主要包括: in.not in.=.!=.exists.not exist ...

  5. Servlet学习笔记(三)之HttpServletResponse

    init() 方法中参数 ServletConfig 对象使用 通过ServletConfig 获得 ServletContext对象 使用 HttpServletRequest 与HttpServl ...

  6. OAuth2-简介

    1. 简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用.因此OAUTH是安全的. ...

  7. 一个简单的URL访问权限校验

    前言 目前最流行的两大安全框架:SpringSecruity.Shiro 权限控制,无非就是:前端控件是否可见.是否允许请求/访问URL 本文分享一个简单的URL访问权限校验,支持/./*./**等情 ...

  8. Echarts中Option属性设置

    目录 一.title--标题组件 二.legend--图例组件 三.tooltip--提示框组件 四.grid--可用于调整图例在整个容器中的占位 五.xAxis--x 轴 六.yAxis-y 轴 七 ...

  9. API:获取当前用户的公网IP

    在vue项目根目录下" public " 文件夹中的index.html,也就是根节点所在的文件引入JS,vue项目中静态文件需要在这里引入,用 script 标签规避跨域 < ...

  10. 加载映射文件几种方式和mapper接口注解执行sql语句

    一.加载映射文件几种方式 二.mapper接口注解执行sql语句 就将xml中的sql语句放到注解的括号中就可以,一般只用于简单的sql语句合适: