首页 > 其他分享 >指针

指针

时间:2023-03-28 19:31:51浏览次数:52  
标签:arr int 地址 pa 数组 指针

1、指针:用来存放地址的,地址是唯一标识一块地址空间的

2.1、意义:指针的类型决定了指针进行解引用操作时,访问空间的大小

         int*---访问4个字节

         char*---访问1个字节

         double*---访问8个字节

                  int a = 0x11223344

                  int* pa = &a ;

                  *pa = 0;-----此时的a为0x00000000

                  char* pc = &a ;

                  *pc = 0 ;------此时的a为0x 11223300(小端存储)

2.2、意义:指针类型决定了:指针的步长,走一步会走多远

         int* pa ;----pa+1地址加4

         char* pc ;---- pc+1地址加1

3、意义的价值:

         int* pa = arr;-----pa+1指向第二个元素位置

         int* ppa = &arr;-----ppa+1指向了跳过整个数组的位置

4、指针变量p

         指向元素:int* p = &a ;指向元素地址

         指向数组:int* p = &arr ;指向数组首元素地址

                         int* p = &arr[9];指向数组第十个元素地址

5、指针的运算

         pa+?(整数):pa向前或先后走该类型个字节,但要避免越界

         pa-pb:等价于&arr[9]-&arr[0],所得结果为9,不论是什么类型的数组,但不要用不同数组的地址去运算,会是未知数

         pa>pb:是可以运用关系运算符的

6、允许指针与数组arr[MAXSIZE]之后的地址作比较,不允许与arr[0]之前的地址作比较

         for( pa = &arr[MAXSIZE] ; pa>arr ; pa--)-----推荐

         for( pa = &arr ; pa<arr[MAXSIZE] ; pa++)----不推荐

7、野指针:指针指向位置是不可知的

         危害:

                  指针未初始化,地址是随机的int* pa;

                  指针越界访问,int* pa = arr;,但arr有十个元素,pa指向了"第十一个"元素

                  指针指向空间被释放:(在vs2022中好像并不会出错,按理说在调用结束后a会被销毁,此时a处的地址并不会存放着a的值)

指针_指针

         避免野指针的产生:

                  指针初始化:int* pa = NULL;不知道存放什么的时候,存放空指针

                  小心指针越界访问,一般会直接程序崩溃

                  指针指向空间被释放时将指针设为NULL(pa = NULL)

                  指针在使用之前检查有效性,在pa = NULL;时,*pa会直接报错(可以在使用前用if判断下指针是否为空指针)

8、多级指针

         一级:int* pa = &a;                        *pa == a;(解引用)

         二级:int** ppa = &pa;                   **ppa == a;

         三级:int*** pppa = &ppa;              ***pppa == a;

         .....(多级指针)

9、指针数组:是数组

         int* arr[3] = {&a , &b , &c};

         int* arr[3] = {pa , pb , pc};(用来存放指针的数组)

       (打印)----*(arr[i])

10、数组指针:是指针

标签:arr,int,地址,pa,数组,指针
From: https://blog.51cto.com/u_13606048/6155262

相关文章

  • C++黑马程序员——P56-62. 指针
    P56.指针——指针的定义和使用P57.指针——指针所占内存空间P58.指针——空指针P59.指针——野指针P60.指针——const修饰指针P61.指针——指针和数组P62.指......
  • C++智能指针、绑定器和函数对象、lambda表达式
    智能指针​ 智能指针可以保证资源的自动释放不带引用计数的智能指针auto_ptr只让最后一个指向的指针管理资源,之前的auto_ptr会被置为nullptrscoped_ptr删除了拷贝构造......
  • C-指针
    指针每一个变量都有一个内存位置,每一个内存位置都定义了可使用&运算符访问的地址,它表示了在内存中的一个地址.指针也就是内存地址,指针变量是用来存放内存地址的......
  • C语言指针的理解
    //demo1.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<stdio.h>inti;voidch(int*a,int*b){ intp; ......
  • 引用和指针的区别
    1、定义和性质不同1、指针是一个变量,存储的地址,指向内存单元2、引用是变量的别名,跟原始变量是同一块内存inta=10;int*p=&a;//p是指针,&在此是取地址运算in......
  • 函数指针
    函数指针的几种用法#include<iostream>#include<vector>usingnamespacestd;voidadd(inta,intb){cout<<a+b<<"";}voidForEach(constvector<int>&n......
  • C++11之智能指针shared_ptr
    在C++开发中,我们经常会遇到程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。C++11新标准中,增添了uni......
  • 快慢指针-leetcode141-判断链表中是否有环。
    LeetCode#141题目描述:给定一个链表,判断链表中是否有环。如果链表中存在环,则返回true。否则,返回false。进阶:你能用O(1)(即,常量)内存解决此问题吗?示例1:example1......
  • 函数指针
        函数的二进制代码存放在内存四区中的代码段,函数的地址是它在内存中的起始位置。如果把函数的地址作为参数传递给函数,就可以在函数中的灵活的调用其它函数。使......
  • 指针与数组(二)
    指针和数组之间的替换:一维数组和指针:数组名是数组的首地址数组名是一个常指针不可修改可以对指针操作来访问元素访问数组的方式:1.直接访问数组a[5];2.使用指针*p......