第八章:指针07

让编程改变世界

Change the world by program


对使用字符指针变量和字符数组的讨论

虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……

主要概括起来有以下几点:

1. 字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。   2. 赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。 char str[20]; str = ″I love Fishc.com!″; 而对字符指针变量,可以采用下面方法赋值: char *a; a = ″I love Fishc.com!″; 但注意赋给a的不是字符,而是字符串第一个元素的地址。   3. 对字符指针变量赋初值: char *a = ″I love Fishc.com!″; 等价于 char *a; a = ″I love Fishc.com!″; 而对数组的初始化: char str[20] = {″I love Fishc.com!″}; 不能等价于 char str[20]; str[] = ″I love Fishc.com!″;   4. 如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。 而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址也就是说,该指针变量可以指向一个字符型数据。 但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。 我们举个例子来说明 如: char str[10]; scanf("%s", str); 以上是完全可以的! 而常有人用下面的方法,目的是想输入一个字符串,虽然一般也能运行,但这种方法是危险的 : char *a; scanf("%s", a);   5. 指针变量的值是可以改变的,如: 改变指针变量的值 [codesyntax lang="c"]

#include <stdio.h>void main()
{char *a = "I love Fishc.com!";printf("%sn", a);a += 7;printf("%sn", a);
}

[/codesyntax] 另外需要说明的是,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。   下标形式引用指针变量 [codesyntax lang="c"]

#include <stdio.h>void main()
{char *a = "I love Fishc.com!";int i;printf("The sixth character is %cnn", a[5]);for( i=0; a[i] != '�'; i++ ){printf("%c", a[i]);}printf("n");
}

[/codesyntax]

指向函数的指针

用函数指针变量调用函数

可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数的入口地址就称为函数的指针。 指向函数的指针.c (点击下载源代码)

用指向函数的指针作函数参数

函数指针变量常用的用途之一是把指针作为参数传递到其他函数。 前面介绍过,函数的参数可以是变量、指向变量的指针变量、数组名、指向数组的指针变量等。 现在介绍指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。 [caption id="attachment_160" align="aligncenter" width="300"] 用指向函数的指针作函数参数[/caption] 它的原理可以简述如下:有一个函数(假设函数名为sub),它有两个形参(x1和x2),定义x1和x2为指向函数的指针变量。 在调用函数sub时,实参为两个函数名f1和f2,给形参传递的是函数f1和f2的地址。这样在函数sub中就可以调用f1和f2函数了。

实战演练

设一个函数process,在调用它的时候,每次实现不同的功能。(有点类似多态) 输入a和b两个数,第一次调用process时找出a和b中大者,第二次找出其中小者,第三次求a与b之和。 源代码:process (点击下载源代码)   [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LGIMVCOTUSUP']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/02/15/3846044.html

指针07 - 零基础入门学习C语言47相关推荐

  1. 指针01 - 零基础入门学习C语言41

    第八章:指针01 让编程改变世界 Change the world by program 指针啥玩意?似乎很神秘? 指针是C语言中的一个重要的概念,也是C语言的一个重要特色. 正确而灵活地运用它,可以 ...

  2. 结构体与共用体07 - 零基础入门学习C语言59

    第十章:结构体与共用体07 让编程改变世界 Change the world by program 用typedef定义类型 用typedef声明新的类型名来代替已有的类型名   声明INTEGER为 ...

  3. 指针02 - 零基础入门学习C语言42

    第八章:指针02 让编程改变世界 Change the world by program 对"&"和"*"运算符再做些说明 如果已执行了语句 point ...

  4. 指针05 - 零基础入门学习C语言45

    第八章:指针05 让编程改变世界 Change the world by program 字符串与指针 (1) 用字符数组存放一个字符串,然后输出该字符串. 例题一:定义一个字符数组,对它初始化,然后 ...

  5. 指针06 - 零基础入门学习C语言46

    第八章:指针06 让编程改变世界 Change the world by program 字符指针作函数参数 出错了:关于a[]和*a的一些区别! [codesyntax lang="c&q ...

  6. 指针08 - 零基础入门学习C语言48

    第八章:指针08 让编程改变世界 Change the world by program 返回指针值的函数 一个函数可以带回一个整型值.字符值.实型值等,也可以带回指针型的数据,即地址. 其概念与以前 ...

  7. 指针04 - 零基础入门学习C语言44

    第八章:指针04 让编程改变世界 Change the world by program 小结 归纳起来, 如果有一个实参数组, 想在函数中改变此数组中的元素的值, 实参与形参的对应关系有以下4种情况 ...

  8. 零基础入门学习C语言

    注:这些都是我辛苦找的资料,希望能对大家有帮助,然后就是大家选择性的下载!我个人推荐小甲鱼20G的那个,一整套!还带工具和众多电子书!全部都是免费的! 郝斌先生的视频讲解也很仔细,但是没有实践作业布置 ...

  9. 文件操作01 - 零基础入门学习C语言60

    第十一章:文件操作01 让编程改变世界 Change the world by program C文件概述 所谓"文件"是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名 ...

最新文章

  1. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?
  2. 开放平台架构_三步画出产品业务架构图
  3. 集成的分层强化学习,让人工智能在解决智能问题时表现得更聪明
  4. 每一个人都是平凡的英雄
  5. 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程
  6. django Admin
  7. python爬虫深入爬取_Python爬虫初学(一)—— 爬取段子
  8. 基于java springmvc+mybatis学生考试系统设计和实现
  9. Android实例-屏幕操持常亮(XE8+小米2)
  10. java long 除法运算_java基础知识学习文档二
  11. php报错集合,centos7安装php5.6报错集合
  12. (13)Spring框架----Spring与Mybatis的框架整合(XML配置详解)
  13. 在ideaIU上使用JDBC连接MySQL及简单操作
  14. [已解决]你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了解更多信息
  15. android 汉子格式转换,拼音转换汉字翻译器
  16. 语音机器人在人工智能领域的发展
  17. 助力低碳出行 | 基于ACM32 MCU的电动滑板车方案
  18. python爬虫爬取补天公益SRC厂商
  19. html显示和隐藏文字特效,14款震撼人心的HTML5文字特效
  20. tensorflow2的checkpoint恢复训练

热门文章

  1. 中国移动物联网客户规模突破2600家 联网接入终端达2300万台
  2. SegmentFault 专访 | AlloyTeam 2015 前端技术大会讲师圆桌
  3. 读淘宝商品描述页源码delphi版
  4. 一小段jQuery代码的分析与优化
  5. 深入理解 Android Https
  6. 业余草 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
  7. webpack4 系列教程: 前言
  8. mysql5.6更改datadir数据存储目录
  9. 百度编辑器修改,不让它自动替换html标签
  10. 45个超实用的JavaScript技巧及最佳实践(一)