zoukankan      html  css  js  c++  java
  • 数组指针与指针数组

    数组指针(行指针):数组指针只是一个指针变量,C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。

    指针数组:指针数组是一个数组,多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。



    数组指针:定义 int (* p)[n];

    指针数组:定义 int *p[n];

    优先级为 () > [] > *

    比如int (* p)[n],因为()的优先级最高,p先于*结合,所以p是一个指针,后面是数组,于是这个就是数组指针。

    在如int * p[n],[]优先级比* 高,p先与[]结合,所以p是一个数组,前边又有*,所以是指针数组。



    数组指针:首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

    指针数组:[]先与p结合成为一个数组,再由int * 说明这是一个整型指针数组,它有n个指针类型的数组元素。这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]…p[n-1],而且它们分别是指针变量可以用来存放变量地址。可以这样 p=a; 这里p表示指针数组第一个元素的值,a的首地址的值。



    在这里插入图片描述
    p1为指针数组,p2为数组指针



    借鉴的大佬的例子:
    数组指针

    #include <stdio.h>
    int main(void) { 
    	int arrP[5] = {1,2,3,4,5};//定义一个数组并赋值
    	int (*p)[5] = &arrP;//定义一个数组指针并为其赋值,把这个数组的首地址赋给了数组指针
    	
    	printf("%p
    ",arrP);//数组名为数组首元素的地址 与 &arrP[0] 等价
    	printf("%p
    ",p);//p为arrP的地址 及 &arrP,注意:虽然arrP与&arrP值相同,单代表的意思却不一样,类型却不同。arrP代表首元素的地址,&arrP代表数组的地址。
            printf("%p
    ",*p);//*p代表arrP,所以这个表示arrP首元素的地址
            printf("%d
    ",**p);//既然*p代表首元素的地址,**p为求这个地址上的值
            printf("%d",(*p)[1]);//*p为arrP,所以(*p)[1]就是arrP[1]的值
    	return 0;
    }
    

    在这里插入图片描述
    指针数组

    #include <stdio.h>
    int main(void) { 
    	int x = 100;
    	int y = 200;
    	int *p[2];//定义一个指针数组
    	p[0] = &x;
    	p[1] = &y;
            printf("%p
    ",p[0]);//x的地址
            printf("%p
    ",&x);//x的地址
            printf("%d",*p[0]);//x的值
    	return 0;
    }
    

    在这里插入图片描述



    暂时就写这些,感觉自己对指针的理解还是不够深刻,再去学学指针,以后有新理解再来补充。

  • 相关阅读:
    python——简单tcp
    关于app签名——无法对 jar 进行签名: 时间戳颁发机构没有响应
    ionic 创建证书
    Android SDK proxy server
    ionic2-生成error
    ng2项目报错
    关于ckeditor粘贴图片自动上传
    简单分页效果
    linux好用的命令
    linux给用户添加sudo权限
  • 原文地址:https://www.cnblogs.com/HBU-xuhaiyang/p/12520638.html
Copyright © 2011-2022 走看看