指针与数组

指针可以与变量结合,也可以与数组结合使用。指针数组和数组指针是两个截然不同的概念,指针数组是一种数组,该数组存放的是一组变量的地址。数组指针是一个指针,表示该指针是指向数组的指针。

1.指向数组元素的指针

int a[5]={1,2,3,4,5};

int *p=a; //int *p=&a[0];

如上代码,指针变量p指向了a数组的首元素,其方法可有两种,int *p=a或int *p=&a[0];
注意:指针变量的类型应与指针所指向的变量的类型一致,如下代码会报错

/*  int *p;  float x=3.14;  指针变量的类型应和所指向的变量类型一致。   p=&x;           否则会报错   */

与整型、浮点型数据一样,指针也可以进行算术运算,但含义却不同。当一个指针加一或减一并不是使指针增加1或减少一,而是使指针所指向的位置向后或向前移动了一个位置。例如执行a=a+3,如果一个整型占用4个字节,则相加后a=2000+4*3=2012(这里假设指针a的初值为2000)。同样指针也可进行自加自减运算。

也可以用一个指针变量减去另一个指针变量,具体看如下代码和结果:

int *p,*q,b;  int shuzu[6]={0,1,2,3,4,5};  p=shuzu,q=&shuzu[3];  printf("p和q两指针的地址分别为:%d    %d",&p,&q);  printf("\np和q两指针的值为(即所指向元素的地址为):%d    %d",p,q);  b=p-q;  printf("\nb的值为:%d ",b);  //b=两指针值相减的差除以4

结果为:

2.指针数组

指针数组其实也是一个数组,只是数组中的元素是指针类型的数据。换句话说,指针数组中的每一个元素都是一个指针变量。
定义指针数组的方式如下:

   int *p[4];

由于[ ]运算符优先级比*高,p优先与[ ]结合,从而形成一个数组,然后再与*结合,表示该数组是指针类型的,每个数组元素是一个指向整型的变量 。
指针数组常常用于储存一些长度不等的字符串数据,有的读者可能会问,为什么不存放在二维数组中?因为如将这些字符串若放在二维数组中,就需要定义一个能容纳最长字符串的数组长度,这样就会浪费一些空间。下面看我的代码,上面有注释。

#includeint main(){  /*二维数组方式存放长度不一的字符串  */  int i,n=2;  char shuzu[2][9]={"my love","my hobby"}; //9为最小长度,不然报错,数组[1]别忘了末尾有个'\0',  //所以长度为8+1=9  printf("%s\n",shuzu);  puts(shuzu[1]); //puts(shuzu)会报错  /* 指针数组存放长度不一的字符串*/   char *s[2]={"my love","my hobby"};  for(i=0;i<2;i++)  printf("第%d个元素为:%s\n",i,s[i]);  char *p;//  for(p=s[0];p//  printf("%s",p);/*p自加后并不是往后移了一个单位*/   p=s[0];  printf("%s\n",p);  p++;  printf("%s\n\n",p);    /*正确方式1*/  printf("\n通过指向数组的指针输出字符串:\n");  for(p=s[0],i=0;i  {    printf("第%d个字符串:%s\n",i+1,p);    i++;    }  /*正确方式二*/  printf("\n用数组名输出指针数组:\n");  for(i=0;i<2;i++)  printf("%s\n",s[i]);}

运行结果:

char二维数组_C语言指针与数组详解相关推荐

  1. 出参传递数组指针_C语言指针重难点详解

    1为什么使用指针 假如我们定义了 char a='A' ,当需要使用 'A' 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 ...

  2. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  3. 指针c语言与数组,C语言指针与数组

    C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝    -- Stan Kelly-Bootle 1. 数组并非指针 为什么很多人会认为指针和 ...

  4. java文档注释定界符_c语言的注释定界符详解

    c语言的注释定界符详解 c语言的注释定界符是什么 1.最早期的C语言注释是:/* */ 2.后来又增加的行注释:// 其中/**/是多行注释,//是单行注释. 需要注意的是:C 语言的注释并不是可以出 ...

  5. c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf() 1 - phpStudy...

    C语言格式化输入输出函数详解 一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种 ...

  6. c语言数组如何把一串数字存入数组_C语言 指针 (三)指针数组与数组指针

    对像我一样的初学者而言,指针数组.数组指针,听名字就很容易傻傻分不清.对于数组与指针的不同,笔者已经在上一篇文章里面已经做出了相对简单的解释.那么,"指针数组"和"数组指 ...

  7. c语言指着与数组,C语言指针与数组

    一维数组 与  指针 1.C语言规定:如果指针变量p已指向同一数组中的下一个元素,见下: 定义: int dates[4],  *p; 那么:dates+2=&dates[2]; *(date ...

  8. c语言数组如何把一串数字存入数组_C语言里面的数组

    为了解决比较复杂的问题,C语言设计了一种构造类型,叫做数组.意思就是把一堆类型相同的数据或者字符能够放在一个变量符号里面,不用在每次写程序的时候把各种各样不同的数据都找出来写进去,只需要写这个变量符号 ...

  9. c语言如何定义比较大的数组_C语言:数据结构-数组的定义、逻辑结构和特点

    一维数组 (1)定义 一维数组是属于同一种数据类型的元素(变量)的有限序列,其元素称为数组元素,每个元素有统一的名称(数组名),有按序编号的唯一的下标.序列中元素的个数称为数组的长度. 例:a=a0, ...

最新文章

  1. SQL Server 2008 下载地址(微软官方网站)
  2. 导师:CV学的这么差,你别毕业了
  3. reactjs 兄弟通信,父子通信
  4. js 打印的一些技巧 去除页眉页脚,主动分页
  5. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170413
  6. 中午xxx遭受攻击,然后发现C盘空间体积缩小,发现该目录占用1G多,全部是站点
  7. [NBUT 1458 Teemo]区间第k大问题,划分树
  8. mysql集群怎么实现状态机_分布式中的状态机
  9. Nature | 基于66种癌症类型训练机器学习模型,绘制癌症基因潜在驱动突变图谱...
  10. SpringBoot—启动报错Exception in thread “main“ java.lang.ClassNotFoundException
  11. Ext.net中的MessageBox的简单应用
  12. git merge 的撤销
  13. shell 中的export作用(转载)
  14. 5.产品的三种流程图,你都知道吗?
  15. 项目开发中XML 读取错误总结
  16. Opera 首个 “重生” 版本亮相:启用全新用户界面
  17. 03_后台管理页面商品列表查询
  18. catia快捷键_CATIA的管理员模式和多版本环境变量设置
  19. DXGI中的flip显示模型
  20. 学习java.awt

热门文章

  1. 第六章 XaaS和IT服务标准
  2. pod进阶(资源管理和探针)
  3. 【AWSL】之LVM与磁盘配额(PV、VG、LV、mkfs)
  4. linux gcc延时怎么写,推迟C静态对象构建 – Linux上的GCC
  5. P2055 [ZJOI2009]假期的宿舍(二分图匹配)
  6. Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述
  7. 新时代大视频产业的底座,视频云创变了什么?
  8. 1 秒钟打造智能化视频内容生产利器
  9. 计算机视觉如何给企业带来不同?
  10. 星辰大海:阿里数据体验技术揭秘!