一维数组和一级指针浅析

SmartGame SmartGame     2022-09-20     153

关键词:

  想要了更容易的了解指针,很好的用法就是通过数组来了解,在c里面,感觉一维数组和一级指针的用法差不多,二维数组和二级指针的用差不多,所以通过数组来了解指针是一种很好的方法;

  数组:将相同 数据类型 的元素按一定顺序排列的集合,把有限个类型相同的 变量 用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组

  其实我们可以把数组看成是一个字符串,就像是C++中的string字符串类型的变量一样,因为c中没有关于字符串变量的定义,我们可以把数组看成是一个字符串吧!

  数组和字符类型是不一样的;

  {

    char a;

    char b[64];

    a = ‘a‘;

    strcpy(b,"aaa");

  }

  就像上面这样字符类型在空间中只分配有一个字节,而数组可以自定义的分配空间,数组写入数据的时候也不像字符类型那样可以直接写入,可以通过键盘输入,要么就是像上面那样;当然还有memcpy(),strncpy()等,这里就不一一举例了;

  然后上面这段代码要是这样写:

  

  {

    char a;

    char b[64];

    a = ‘a‘;

    strcpy(b,"aaa");

    printf("%c ",a);// 输出 a 

    printf("%d ",a);//输出 a 在ASCLL中的序号97

    printf("%d ",&a);// 输出a的地址不同电脑可能不一样

    printf("%d ",&b);//输出地址7863796

    printf("%d ",b);///输出7863796

    printf("%d ",&b[0]);//输出地址7863796

    system ("pause");

  }

  我们发现输出&b,b,&b[0] 竟然都是b的地址,那么我们可不可以吧b看成是指向b首地址&b[0]的指针呢?

  {

    char b[64];

    char *c = NULL;

    c = b;// 将一维数组的地址传递给指针

    //或者 c = &b;

    printf("%d ",b);

    printf("%d ",c);

  }

  我们发现打印出来的结果是一样的,那么关于用法上我们也可以看看,其实这一点在数组作参数的退化问题哪里我已经写过了;

  {

     char a[64] = "aaaa";//直接往空间赋值了

    char *b = NULL;

    int i = 0;

    int j = 0;

    i = strlen(a);//计算字符串的个数

    b = a;//将地址传递给b

    //下面打印字符串,一个一个的通过下标打印

    for(j = 0 ; j < i : i++)

    {

      printf("%c ",a[i]);

     }

    putchar(‘ ‘);//换行

    

   for(j = 0 ; j < i : i++)

    {

      printf("%c ",b[i]);

    }

    //或者

    

    for(j = 0 ; j < i : i++)

    {

      printf("%c ",*(b +j));

    }

  }

  我们发现printf("%c ",a[i]);,printf("%c ",b[i]);,printf("%c ",*(b +j));三种输出都可以将字符打印出来,效果完全一样,所以我们可以将一级指针看成是一维数组,一维数组看成指针;但是记住这里是看成,不能理解为是等价的;比如一级指针取地址可以传递给二级指针但是数组就不能。所以说如果用的话,我们可以把指针当成数组使用。

  

详解c语言指针(代码片段)

...名的区别3.3数组指针的使用4.数组参数,指针参数4.1一维数组传参4.2二维数组传参4.3一级指针传参4.4二级指针传参5.函数指针6.函数指针数组7.指向函数指针数组的指针8.回调函数9.指针和数组笔试题9.1一维数组9.2字符数组9.2.19.... 查看详情

指针和数组关系的浅析

  关于指针和数组之间的关系,估计有人还是对于数组与指针地址的关系有些模糊,对于这点,我今天对这一点做一个小小的总结好了;  我们已经知道指针和数组的用法差不多,但是指针的地址和指针指向的地址是不一样... 查看详情

你比昨天更懂指针了吗?(代码片段)

...&数组名VS数组名数组指针的使用数组传参和指针传参一维数组传参二维数组传参一级指针传参二级指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组相关面试题练习题一维 查看详情

一级指针,二级指针,指针数组,数组和指针

指针和数组指针是个用来存放地址的变量;&arr表示整个数组;arr数组名表示首元素的地址;指针解引用即表示指针所指向的内容比如:charptr="abcdef";ptr;//指针解引用即表示它所指向的内容,即abcdefptr;//ptr里保存的是字符... 查看详情

c基础指针的使用(代码片段)

....9指针与char数组1.10指针数组1.11指针的间接赋值和取值1.12一维数组指针1.13二维数组指针二、二级和多级指针2.1二级指针与一级指针数组的关系2.2多级指针三、指针在函数中的应用3.1在函数参数中使用 查看详情

c语言数组(多维数组本质|步长角度理解多维数组本质)(代码片段)

...的地址,整个第i行地址,array是二级指针;array+i的步长是一维数组的大小,也就是121212字节;一级指针:*(array+i)表示第i行的首元素地址,*二级指针是一级指针;*(array+i)使用*取出来的是一级指针变量,这个一级指针变量就是一维数... 查看详情

c语言篇+指针进阶(上)(代码片段)

...刀小试二、指针数组1.1指针数组的初始化1.2指针数组存放一维数组的地址三、数组指针1.1&数组名VS数组名1.2数组指针的使用1.2.1数组指针的错误示范1.2.2数组指针的正确示范示范四、数组参数、指针参数1.1一维数组传参1.2二维... 查看详情

指针与一维数组和二维数组以及字符串指针数组的学习笔记

...已经注释了,看注释信息理解即可。说明:本程序讨论了一维数组和指针的关系,谈论了二维数组和指针之间的关系,讨论了字符串数组指针数组和指针之间的关系,代码中以给出定义的方法和简单的使用,但是有些使用方法并... 查看详情

02指针进阶(代码片段)

...S数组名 4.3数组指针的使用 5.数组参数,指针参数5.1一维数组传参5.2二维数组传参 5.3一级指针传参 5.5二级指针传参6.函数指针7.函数指针数组8.指向函数指针数组的指针9.回调函数1.本章重点1.字符指针2.数组指针3.指针数组4... 查看详情

数组参数和指针参数

...二维数组参数同样存在退化的问题,二维数组可以看做是一维数组,二维数组中的每个元素是一维数组4.二维数组参数中第一维的参数可以省略5.C语言中无法向一个函数传递任意的多维数组6.为了提供正确的指针运算,必须提供... 查看详情

二维数组和二级指针(真的没什么关系)

...始学c语言的时候,总是会认为,一级指针可以用来访问一维数组,那么二维数组就要用二级指针来访问啦。。。。实际上二级指针和二维数组真的没什么关系,而且,切记千万不要用二级指针访问二维数组。。。。。下面是几... 查看详情

c语言提高内容目录

...二级指针输入的三种内存模型多级指针的使用(4)数组一维数组 二维数组数组类型 数组指针类型数组指针类型变量多维数组(5)结构体结构体的使用(6)文件操作文件读写操作配置文件的读写案例(自定义接口)文 查看详情

指针和一维数组之间的关系数组的引用方法指针的运算(代码片段)

/* 2022.06.07 目的: 学习指针和一维数组之间的关系 理论: 1.关系 a.数组是多个相同类型的变量的集合; b.每一个变量都占内存空间,都有自己对应的地址编号; c.指针变量也当然可以存放数组元素的地址; d.数组... 查看详情

指针数组和数组指针

...p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:inta[3][4];int(*p)[4];//... 查看详情

二维数据和一维指针数组(代码片段)

1.二维数组名a的含义:定义一个二维数组a:  inta[3][4]=1,3,5,7,9,11,13,15,17,19,21,23;  a数组包含3个行元素,a[0],a[1],a[2]。      每个行元素a[i]又是一个一维数组,它包含4个元素。a==&a[0]a+i==&a[i]a[0]==& 查看详情

数组指针和指针数组的区别

...p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:inta[3][4];int(*p)[4];//... 查看详情

指针数组和数组指针的区别

...p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:inta[3][4];int(*p)[4];//... 查看详情

数组指针和指针数组的区别

...p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:inta[3][4];int(*p)[4];//... 查看详情