• HQS-Part4.指针、一维数组、二级指针、二维数组、指针数组、数组指针。


    一、指针

    1. 指针也就是内存地址,指针变量就是存放地址的变量。

    2. 定义指针变量。

    格式:指针类型 + 变量名;
    指针类型:目标数据类型+ “* ”,“ *"是说明符,表示指针类型;

    3. & 为取地址符,功能:获取变量的地址,其结果为:原本类型 + *;

    例如:int a=10;变量a的类型为int;&a 的类型为int *;

    4.* 为间接引用符,功能:获取地址中目标数据值;其结果为:原本类型(指针类型)- *;

    例如:
    	int a=10;
    	int*p=&a;
    	*p的类型为int 型;
    	a的值用p表示为:*p;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、一维数组

    定义=类型+名字

    1.定义:short a[8]; 变量a的类型为:short [8];数组名a;

    ①通常情况下,数组名表示该数组的首元素的地址:&a[0]=a;
    项目&a[0]a
    类型short *short *
    偏移量short(2个字节)short(2个字节)

    定义指针类型为 :a
    short *p_a=a;//p_a的偏移量是short;
    short *pa_a=&a[0];

    ②特殊的两种情况,代表整个数组;
    1)sizeof(a)----->2*8=16个字节;
    2)&a —>类型为:short () [8];&a的偏移量:short [8];&8+1—>移动short [8](2x8个字节);

    定义:short (*p)[8]=&a;

    3.通过数组名a 获取数组中元素的值:

    short a[8];
    short *p=a;//p的类型:short *;
    获取数组中元素可以使用:数组名[下标];
    a+0 类型为:short *
    *(a+0) 类型为:short
    *(a+i) 等价于a[i];
    故:*()<===>[]
    p=&a[0];
    p+0类型为short *;
    *(p+0)类型为short ,取得第一个数组第一个元素的值p[0];
    *(p+i)=p[i];
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    三、一级指针与字符串 、多级指针

    1.内存中有:常量区(只读)、栈区(可读可写)。
    char buf[5]={'a','b'};//数组存储在栈区,共使用5个字节;
    char *p=NULL;
    p="HELLO";//"HELLO"是字符串常量,操作系统会在常量区分配6个字节
    		//p中保存的是字符串常量的地址
    p[0]='H';//不能在给p[0]赋值;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    2.二级指针:保存一级指针的地址;
    int a=20;
    int *p=&a;//p为一级指针
    int **pp=&p;//pp为二级指针
    
    a 的值为:*p  =**p;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    四、指针数组、数组指针

    1.指针数组:本质为数组,所有元素为指针(地址);
    定义:数组内元素类型 数组名[元素个数];
    		short *     a[10];
    		short *     b[]={&d,&c};
    		short **q=NULL;
    		q=a;
    
    用法:等同于数组
    	数组名[下标],数组中元素,为指针类型;
    	*数组名[下标],地址所对应的数值;
    
    数组名:a
    		a=&a[0]
    			a[0]的类型为:short *
    		   &a[0]的类型为:short **
    	结论:指针数组名用二级指针保存。
    		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    2.数组指针:本质是指针,指向的是整个数组;
    定义: int a[8];
    		&a的类型为:int (*)[8];
    		int (*p)[8]=&a;
    
    • 1
    • 2
    • 3

    五、二维数组与指针

    short a[2][3]={1,2,3,4,5,6};//看成两个一维数组
    人为理解:
    a[0]  1 2 3
    a[1]  4 5 6
    但物理存储是线性的。
    数组名 a:  一个一维数组,一维数组里面又是一维数组
    			把二维数组看成一个一维数组,元素分别是:
    		   a[0],a[1];则该数组的首元素的地址:
    		   为&a[0]等价与:a//行指针。
    		   & a[0]     <===>       a
       类型:short (*)[3]      short (*)[3]
       偏移量:short [3]       short [3]
      a,a+i 等同于 行指针:short (*p)[3]=a;
    
    数组名a[i]: 该数组的首元素的地址:
    			&a[i][0]      <====>  a[i]
    	类型:	short *				short *
    	偏移量: short                short 
    	a[i[等同于列指针  short *q =a[0];
    	列指针获取元素:*(a[i]+j)  <===>*(*(a+i)+j)	;	
    
       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    浏览器字体变大|变小怎么办,浏览器字体大小设置方法
    MongoDB 副本集创建索引无响应
    vue中使用coordtransform 互相转换坐标系
    Intellij IDEA 内存设置的问题 及解决
    一文带你入门机器学习超参数优化算法
    Debian(Linux通用)安装 Kafka 并配置远程访问
    【算法篇】刷了两道大厂面试题,含泪 ”重学数组“
    GD32F103x IIC通信
    【cmake】cmake使用install安装库
    Jpa JdbcTemplate 批量插入效率对比
  • 原文地址:https://blog.csdn.net/jun8086/article/details/126732465