练习6:变量类型

原文:Exercise 6: Types Of Variables

译者:飞龙

你应该掌握了一个简单的C程序的结构,所以让我们执行下一步简单的操作,声明不同类型的变量。

include <stdio.h>int main(int argc, char *argv[])
{int distance = 100;float power = 2.345f;double super_power = 56789.4532;char initial = 'A';char first_name[] = "Zed";char last_name[] = "Shaw";printf("You are %d miles away.\n", distance);printf("You have %f levels of power.\n", power);printf("You have %f awesome super powers.\n", super_power);printf("I have an initial %c.\n", initial);printf("I have a first name %s.\n", first_name);printf("I have a last name %s.\n", last_name);printf("My whole name is %s %c. %s.\n",first_name, initial, last_name);return 0;
}

在这个程序中我们声明了不同类型的变量,并且使用了不同的printf格式化字符串来打印它们。

你会看到什么

你的输出应该和我的类似,你可以看到C的格式化字符串相似于Python或其它语言,很长一段时间中都是这样。

$ make ex6
cc -Wall -g    ex6.c   -o ex6
$ ./ex6
You are 100 miles away.
You have 2.345000 levels of power.
You have 56789.453200 awesome super powers.
I have an initial A.
I have a first name Zed.
I have a last name Shaw.
My whole name is Zed A. Shaw.
$

你可以看到我们拥有一系列的“类型”,它们告诉编译器变量应该表示成什么,之后格式化字符串会匹配不同的类型。下面解释了它们如何匹配:

整数

  使用int声明,使用%d来打印。

浮点

  使用floatdouble声明,使用%f来打印。

字符

  使用char来声明,以周围带有'(单引号)的单个字符来表示,使用%c来打印。

字符串(字符数组)

  使用char name[]来生命,以周围带有"的一些字符来表示,使用%s来打印。

你会注意到C语言中区分单引号的char和双引号的char[]或字符串。

当我提及C语言类型时,我通常会使用char[]来代替整个的char SOMENAME[]。这不是有效的C语言代码,只是一个用于讨论类型的一个简化表达方式。

如何使它崩溃

你可以通过向printf传递错误的参数来轻易使这个程序崩溃。例如,如果你找到打印我的名字的那行,把initial放到first_name前面,你就制造了一个bug。执行上述修改编译器就会向你报错,之后运行的时候你可能会得到一个“段错误”,就像这样:

$ make ex6
cc -Wall -g    ex6.c   -o ex6
ex6.c: In function 'main':
ex6.c:19: warning: format '%s' expects type 'char *', but argument 2 has type 'int'
ex6.c:19: warning: format '%c' expects type 'int', but argument 3 has type 'char *'
$ ./ex6
You are 100 miles away.
You have 2.345000 levels of power.
You have 56789.453125 awesome super powers.
I have an initial A.
I have a first name Zed.
I have a last name Shaw.
Segmentation fault
$

Valgrind下运行修改后的程序,来观察它会告诉你什么关于错误“Invalid read of size 1”的事情。

附加题

  • 寻找其他通过修改printf使这段C代码崩溃的方法。

  • 搜索“printf格式化”,试着使用一些高级的占位符。

  • 研究可以用几种方法打印数字。尝试以八进制或十六进制打印,或者其它你找到的方法。

  • 试着打印空字符串,即""

笨办法学C 练习6:变量类型相关推荐

  1. 《笨办法学Python》——习题3

    文章目录 基本习题 1. 完成基本习题 加分习题 1. 使用#在代码每一行的前一行为自己写一个注解,说明一下这一行 2. 记得开始时的 <练习 0> 吧?用里边的方法把 Python 运行 ...

  2. 《笨办法学Python》——习题5

    文章目录 基本习题 1. 完成基本习题 加分习题 1. 修改所有的变量名字,把它们前面的"my_"去掉.确认将每一个地方的都改掉,不只是你使用"="赋值过的地方 ...

  3. 计算机编程书籍-笨办法学Python 3:基础篇+进阶篇

    编辑推荐: 适读人群 :本书适合所有已经开始使用Python的技术人员,包括初级开发人员和已经升级到Python 3.6版本以上的经验丰富的Python程序员. "笨办法学"系列, ...

  4. python教程第四版pdf下载-笨办法学python第四版

    笨办法学python第四版是由Zed Shaw所编写的一本书.如果你还是Python新手,那么这是一本非常不错的入门书籍.书本里以习题方式,引导读者慢慢学会了编程. 目录: 习题 0: 准备工作 习题 ...

  5. python教程第四版pdf下载-笨办法学python第四版 电子书(pdf格式)

    笨办法学python第四版是由Zed Shaw所编写的一本书.如果你还是Python新手,那么这是一本非常不错的入门书籍.书本里以习题方式,引导读者慢慢学会了编程. 目录: 习题 0: 准备工作 习题 ...

  6. python教程第四版pdf下载-笨办法学python 第四版 中文pdf高清版

    笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...

  7. 笨办法学Python——学习笔记1

        最近想学gtk,但是gtk在window上编译和运行挺慢的,于是搜索了一下发现了pygtk.在前几天 把环境都配好了,现在想同时学gtk和pygtk,但Python没学过,找到了<笨办法 ...

  8. 笨办法学python pdf 第三版_笨办法学python第三版

    笨办法学python第三版pdf电子书是一本Python学习参考书,是美国程序员Zed A.Shaw编著,通过简单通俗的方法,结合内部的集体,让程序员学懂python,适用于初级学习python编程的 ...

  9. 从零开始学数据分析之——《笨办法学Python》(习题0-10)

    写在前面 三十而立之年,开始自学数据分析,工作比较清闲,现发帖记录自己的数据分析之路,数据分析要学很多的东西,经过多月的摸索,目前分两个方面开始学习: ·知识方面:数学为王,拿起书本,重学<概率 ...

  10. 笨办法学python 粗略笔记(learn python the hard way)

    笨办法学python 粗略笔记(learn python the hard way) 标签(空格分隔): python # _*_ coding: utf_8 _*_ ''' ### ex1 prin ...

最新文章

  1. mysql 一键获取数据库表结构
  2. BZOJ 2037 Sue的小球
  3. mysql、clickhouse读写分离性能测试
  4. SAP Spartacus 页面元数据
  5. springboot-添加拦截器
  6. Vue.js 极简小例:数值计算、千米换算为米、九九乘法表、循环
  7. WinForm中DataGridView的TextBoxColumm换行
  8. 一个抓取豆瓣图书的开源爬虫的详细步骤
  9. apache2.4打开laravel项目_Laravel异步队列全攻略
  10. BZOJ4318: OSU!
  11. Redis(一)入门
  12. seo优化之如何选择产品
  13. xos虚拟系统 代理服务器,VMware宝典:一手缔造超级虚拟网络
  14. java实现电话的呼叫转移_「呼叫转移设置」呼叫转移流程分析(一) - seo实验室...
  15. linux蓝牙遥控,蓝牙遥控器连接流程分析
  16. ACPC Kickoff 2021
  17. 2022年R2移动式压力容器充装特种作业证考试题库及在线模拟考试
  18. 几个炫酷的3D旋转动态效果(附代码)
  19. 酷炫的图片轮播框架AndroidImageSlider
  20. 《比尔总动员》删档测验正式敞开,开端你的地球捍卫之旅吧

热门文章

  1. 科幻电影系列-计算机技术
  2. PCL:全程详解 VS2010+PCL配置
  3. 学计算机之路写一篇作文,学习之路作文
  4. c++清空一个txt文本_Linux练习6: 文本查看cat, head, less
  5. 第二章:方法区和运行时常量池溢出
  6. 关于最近公司裁员和加班的思考
  7. RabbitMQ使用简述
  8. Vue.js分页组件实现:diVuePagination
  9. IOS 通讯录 右侧的字母栏
  10. 【转】Android 轻松实现语音识别