一维数组和一级指针浅析

  想要了更容易的了解指针,很好的用法就是通过数组来了解,在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\n",a);// 输出 a

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

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

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

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

    printf("%d\n",&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\n",b);

    printf("%d\n",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(‘\n‘);//换行

    

   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));三种输出都可以将字符打印出来,效果完全一样,所以我们可以将一级指针看成是一维数组,一维数组看成指针;但是记住这里是看成,不能理解为是等价的;比如一级指针取地址可以传递给二级指针但是数组就不能。所以说如果用的话,我们可以把指针当成数组使用。

  

时间: 2024-10-06 10:56:18

一维数组和一级指针浅析的相关文章

【C语言】12-指向一维数组元素的指针

一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p = &a[0]; 9 10 // 修改所指向元素的值 11 *p = 10; 12 13 // 打印第一个元素的值 14 printf("a[0] = %d", a[0]); 输出结果:,说明已经通过指针间接修改了数组元素的值,跟指向一个普通int类型变量是一样的. 由于数组名代表

学习笔记之12-指向一维数组元素的指针

一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8 p = &a[0]; 9 10 // 修改所指向元素的值 11 *p = 10; 12 13 // 打印第一个元素的值 14 printf("a[0] = %d", a[0]); 输出结果:,说明已经通过指针间接修改了数组元素的值,跟指向一个普通int类型变量是一样的. 由于数组名代表

【C语言】指向一维数组元素的指针

本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 前面我们已经学习了指针,如果指针存储了某个变量的地址,我们就可以说指针指向这个变量.数组及其数组元素都占有存储空间,都有自己的地址,因此指针变量可以指向整个数组,也可以指向数组元素. 回到顶部 一.用指针指向一维数组的元素 1 // 定义一个int类型的数组 2 int a[2]; 3 4 // 定义一个int类型的指针 5 int *p; 6 7 // 让指针指向数组的第0个元素 8

【C语言】-指向一维数组元素的指针

本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 前面我们已经学习了指针,如果指针存储了某个变量的地址,我们就可以说指针指向这个变量.数组及其数组元素都占有存储空间,都有自己的地址,因此指针变量可以指向整个数组,也可以指向数组元素. 回到顶部 一.用指针指向一维数组的

C语言 12-指向一维数组元素的指针

本文目录 一.用指针指向一维数组的元素 二.用指针遍历数组元素 三.指针与数组的总结 四.数组.指针与函数参数 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略. 前面我们已经学习了指针,如果指针存储了某个变量的地址,我们就可以说指针指向这个变量.数组及其数组元素都占有存储空间,都有自己的地址,因此指针变量可以指向整个数组,也可以指向数组元素. 一.用指针指向一维数组的元素 1

二维数组和二级指针关系浅析

昨天写了关于一级指针的见解,即二级数组的用法和二级指针差不多,关于数组指针和指针数组这两个是不同的概念,这一点我们一定要清楚: 数组指针我们可以理解为指向数组的指针,就是一个指针: 指针数组则可以理解为数组里存的是指针,即每个储存空间上储存的是指针变量:这里储存了多个指针 一个数组可以这样定义 char a[3];分配了3个字节的内存 二维数组可以这样定义 char b[3][3];分配了3*3 即9个字节的内存 我们知道一维数组和一级指针的用法差不多,那么二级指针有和二级指针有什么关系呢? {

C语言之一维数组与指针

一维数组: 假如有一维数组如下: char a[3]; 该数组有3个元素,数据类型为char型,地址空间如下. 如果想访问数据,直接使用a[0].a[1].a[2]取出相应地址空间的值即可 一级指针: 指针即地址,char *b即定义一个指向char型数据的指针,int *b即定义一个指向int型数据的指针. int a=5; int *b=&a; 例子解析:定义一个int型数据a,值为5,定义一个指向int型的指针b,b的值为a的地址.使用*b就是b指向地址的值.地址空间如下. 二级指针: 二

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

利用指针地址偏移打印一维数组

// //  main.c //  利用指针地址偏移打印一维数组 // // Created by wanghy on 15/7/24. // Copyright (c) 2015年 wanghy. All rights reserved. // #include <stdio.h> #define len 10 int main(int argc, const char * argv[]){ //定义一个存放  int 类型元素的一维数组. int arry[]={1,2,3,4,5,6,7