在平时使用数组和指针的时候,感觉他们的使用很类似。那么数字和指针在使用的过程中到底有什么区别呢?
  下面通过一个例子来简单分析一下。

 char str1[] = "abcdef";char *str2 = "123456";int i;for(i=0; i<6; i++)putchar(str1[i]);putchar('\n');for(i=0; i<6; i++)putchar(str2[i]);putchar('\n');

  分别定义了一个数组和指针,都是用来存储字符串,然后分别控制下标来打印字符串。

  从打印结果来看,数组和指针定义的字符串都可以正常打印,说明按照数组的操作方法来操作指针也是可以的。 那么能不能用操作指针的方法来操作数组呢?

修改程序如下:

 char str1[] = "abcdef";char *str2 = "123456";int i;for(i=0; i<6; i++)putchar( *(str1 + i) );putchar('\n');for(i=0; i<6; i++)putchar( *(str2 + i) );putchar('\n');

  在输出字符的时候,使用指针加法的操作,通过指针去取对应地址上的值。输出结果如下。

  通过数据结果可以看出,把数组当做指针操作也是可以的。在平常使用指针输出字符串的时候,大多数情况下都是使用while循环,通过判断结束符来终止输出。这里将for循环改为while循环试试。

 while(*str2 != '\0')putchar( *str2++ );

  通过判断结束符来决定是不是要继续打印,然后只用指针递增的操作来取下一个字符。

  接下来将数组也改成这种方式。

此时编译器提示代码出错了。

  为什么会出错呢?这里就是数字和指针的区别了。
  数组名是常量,指针是变量。常量不能进行自增操作,但是变量可以进行自增操作。

  根据这个区别就可以知道对常量可以进行的操作对数组名就可以进行,对常量不能进行的操作,对数组名也不能进行操作。当定义了一个数组之后,这个数组名就不能再改变了,用于指向的是这个数组。但是定义了一个指针之后,这个指针的指向是可以改变的。可以用这个指针指向当前数组,也可以用这个指针指向另一个数组。比如在程序运行的过程中改变指针的指向。

 char str1[] = "abcdef";char *str2 = "123456";int i;for(i=0; i<6; i++)putchar( *(str1 + i) );putchar('\n');str2 = str1;while(*str2 != '\0')putchar( *str2++ );putchar('\n');

在打印指针指向的字符串时,改变指针的指向。

从打印的结果可以看出,指针打印出来的字符串内容已经发生了改变。所以在使用指针的时候要注意这个问题。

C语言学习笔记---数组和指针的区别相关推荐

  1. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  2. Go语言学习笔记-数组、切片、map

    Go语言学习笔记-数组.切片.map 数组:同一数据类型元素的集合.是值类型,长度固定无法修改 声明格式:var 数组名字 [元素数量] 数据类型 var arr [3] int //声明定义了一个长 ...

  3. 面试笔记 | 数组与指针的区别

    1. 简述数组与指针的区别 数组是直接访问数据的. 指针是间接访问数据的. 定义: 数组是类型相同.数目固定的若干个变量的有限集合,它存放的是数据. 指针是变量的地址,存放的是变量的地址. 存储方式: ...

  4. C语言学习笔记--数组参数和指针参数

    1. 数组参数退化为指针的意义 (1)C 语言中只会以值拷贝的方式传递参数,当向函数传递数组时,将整个数组拷贝一份传入函数导致执行效率低下,C 语言以高效作是最初的设计目标,所以这种方法是不可取的. ...

  5. C语言学习笔记--数组指针和指针数组

    C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定.(如 int array[5]类型为 int[5]) 1.定义数组类型 C 语言中通过 typedef 为数组类型重命名:ty ...

  6. 【C语言学习笔记】26. 指针(3)指向指针的指针、传递指针给函数

    前言 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.通常,一个指针包含一个变量的地址.当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置. ...

  7. C语言学习笔记----4(指针)

    文章目录 指针深入介绍 指针类型 二级指针 字符指针 指针数组 数组指针 函数指针 函数指针数组 函数指针数组指针 回调函数 总结 指针深入介绍 众所周知,亚里士多德1撑起了古希腊科学.哲学的半壁江山 ...

  8. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  9. 【C语言学习笔记】函数指针的定义和用法

    函数指针的定义和用法 先回顾下数组的储存方式,当你在程序中定义了一个数组,那么系统就会自动根据你的数组类型和数组长度申请一块储存空间给你.而且数组名储存的地址刚好就是申请的这块储存空间的首地址,这也是 ...

最新文章

  1. KVM虚拟机添加虚拟磁盘
  2. 检查数据库的CPU和PSU补丁信息
  3. Java 面试知识点解析(一)——基础知识篇
  4. 《SAP高级应用开发》---Idoc学习笔记
  5. mac下的svn服务器建立
  6. 电线之间:采访Microsoft Edge性能PM Nolan Lawson
  7. 【java】多线程控制(一)---Semaphore、Exchanger、CyclicBarrier、CountDownLatch
  8. 简单粗暴,快速入门Python
  9. Java校招笔试题-Java基础部分(七)
  10. 学习-【前端】-angularjs基本框架以及向服务器发送请求的方法
  11. python语言程序设计实践教程陈东_《Python语言程序设计实践教程》陈东著【摘要 书评 在线阅读】-苏宁易购图书...
  12. 51单片机驱动WS2811彩灯源程序方案
  13. 七上八下猜数字_猜数字教案
  14. mysql查询各科成绩前三名_mysql巧用连表查询各科成绩前三名
  15. 常见文件编码 - 多字节编码与Unicode编码区别
  16. 反客为主:巧妙用grldr冒名顶替ntldr引导XP/Ubuntu
  17. CANopen协议及应用
  18. C语言计算三角形面积参考代码
  19. cve查询网址(漏洞查询地址)
  20. css溢出影藏然后显示三个小点

热门文章

  1. C#中使用消息队列服务
  2. WIN2008下找不到proxy的处理方法
  3. 分布式监控系统ganglia配置文档
  4. SCVMM Self-Service Portal 2.0 SP1安装体验
  5. 弱鸡儿长乐爆肝旅Day8
  6. C# 各版本新增功能
  7. HDU - 6033 Add More Zero
  8. 201521123061 《Java程序设计》第六周学习总结
  9. 延时加载 lazyload使用技巧
  10. [Java2入门经典]第9章 访问文件和目录