使用devC++写hello world

  第一步:文件-新建-源代码。然后输入“输出hello world”程序:

    注意:写程序时关闭中文输入法,否则语句输入的分号可能会被识别为错误。除了printf外,剩余的代码叫做程序框架,是我们后面所有的程序都需要的。

  第二步:保存时注意修改保存类型,devc++默认是C++文件,需要修改为C。

  第三步:类似魔方的小方块的编译,运行或者编译+运行;或者运行菜单项下的运行、编译;或者F9快捷键。运行时会弹出小黑框,这是程序运行看结果的地方,这个小黑框很多种说法,比如就叫小黑框,终端,命令行,控制台等。

解析printf函数和scanf函数,进而引出指针

  printf函数有双引号,双引号内部的东西是字符串,printf会原封不动的输出到终端,\n表示在输出结果后面换一行。那么如果输出到终端是一个变量的值哪?再main里定义一个变量,给变量一个初值,把这个变量直接写入双引号内吗?

      

  当然不是,变量的输出需要指定格式,如上图。%d的作用是将输出的数据转换为指定的格式然后输出,称为格式声明,格式声明一般以%字符开始。格式指定了,然后指定输出哪一个变量,即逗号后的i。

  现在输入的是一个固定的值,如果想要用户输入一个数直接显示在终端上,那该怎么修改程序?需要加入scanf函数。

      

  scanf函数和printf函数的参数类似,双引号内的内容指定输入数据的格式,将数据存入逗号后的变量内,和printf不一样的是变量前必须添加&符号,如果不添加就会出错,那么这个&符号是什么呢?

  &运算符:

  &(and符号)是C语言的一个运算符,和加减乘除一样是一个运算符,那么&计算什么呢?它的作用是取得变量的地址,所以它的操作数必须是一个变量,&把变量的地址取出来,为什么变量有地址呢?因为C语言的变量是放在内存里面的。

     

  每个变量在内存里都占用一定大小的空间,比如sizeof(i),得到整形变量i所占内存的字节数是4,那么就是说i存放在某一个地方的连续4个字节里,那么存放在哪个地方这个地方就有地址,所以&运算符就是把这个变量的地址拿出来,那这个地址是一个什么样的值呢?我们来试一下:

  输出地址使用%x还是%p:

      

  据说地址用十六进制表示比较方便,所以我们使用%x表示地址的格式,然后取i的地址给%x,输出到终端。我们看下上述程序编译器给我们什么样的结果:0X62fe4c,这是个什么值我们不知道,但是看起来好像是个很大的值。

      

  在编译上述程序的时候,devc++没用给出警告,在有些编译器里会给出如下警告:format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int *’。这个警告是说%x是一种无符号整数类型,而&i的类型是int*。

  我们将地址转换为整型打印到终端,在printf函数格式转换里有个%p,是比较标准的输出地址值,那么我看下和%x的区别:

             

      

  %x是将地址转换为32位整型输出到终端,%p是直接输出地址。使用sizeof输出int和&i,可以看出整型是4个字节,而地址是8个字节。%x是截取了地址的低4个字节,在上述例子中,恰巧高4位都是0,在有些编译器和运行环境中,高位不是0的时候,使用%x输出地址就会出现错误。所以我们一般使用%p格式将地址输出到终端。

  &运算符的运算数只能是变量,不能是表达式。我们试一下,使用&取i++的地址:

      

  这时编译器给出错误提示:lvalue required as unary ‘&’ operand。&需要一个一元的操作数。

  那么&取相邻的变量的地址是怎么样的?

      

  i,j两个变量的地址是相邻的,那么两个变量的地址是什么样呢?输出结果可以看出地址一个是4c,一个是48,这两个值差了多少?c是16进制,相当于十进制的12,差了4,那么我们知道整型占了4个字节,这说明什么问题呢?这说明在内存里这两个变量是紧挨着存放的,如下图,低地址画在下面,i先定义的变量,j是后定义的变量,但是他俩在内存里的位置,i是高地址,j在低地址,这是因为我们以后会讲到C语言的内存模型,这两个变量是分配在内存中一个叫堆栈(stack)的区域,在堆栈里我们分配地址是自顶向下分配的,所以我们可以看到先声明的变量地址更高,而后声明的变量地址更低,但是他们俩是紧挨着的。

      

  数组的地址、数组单元的地址、相邻的数组单元的地址是怎么样的?(一行行解释程序并解释结果。)

      

      

  通过结果我们知道,我们做了一个10个数的数组,&a的值和a是相等的,都等于a[0]第0个元素的地址,而a[1]是第一个元素的地址,相差了4个字节。如果一直看下去会发现相邻的数组单元的地址都差了4.

  上述的例子有什么用呢?转下一篇blog。 

听翁恺老师mooc笔记(2)-第一个程序--&运算符的更多相关文章

  1. 听翁恺老师mooc笔记(16)--程序设计与C语言

    问题1:计算机遍布生活的各个方面,若你需要一个功能可以下载APP,我们需要的大部分功能都可以找到对应的APP,如果没有可以自己写一个软件,但是很少人需要这么做,那么我们为什么学习计算机编程语言? 学习 ...

  2. 听翁恺老师mooc笔记(15)--文件的输入与输出

    <>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...

  3. 听翁恺老师mooc笔记(14)--格式化的输入与输出

    关于C语言如何做文件和底层操作: 文件操作,从根本上说,和C语言无关.这部分的内容,是教你如何使用C语言的标准库所提供的一系列函数来操作文件,最基本的最原始的文件操作.你需要理解,我们在这部分所学习的 ...

  4. 听翁恺老师mooc笔记(13)--类型定义和联合

    typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...

  5. 听翁恺老师mooc笔记(12)--结构中的结构

    结构数组: 和C语言中的int,double一样,一旦我们做出一个结构类型,就可以定义这个结构类型的变量,也可以定义这个结构类型的数组.比如下面这个例子: struct date dates[100] ...

  6. 听翁恺老师mooc笔记(10)--结构

    定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比 ...

  7. 听翁恺老师mooc笔记(8)--字符串2

    字符串的赋值 字符串的输入与输出 对C语言的基础类型,比如int.double等类型,scanf.printf有专门的格式转换,而对字符串,scanf.printf使用%s格式字符进行输入与输出.当使 ...

  8. 听翁恺老师mooc笔记(7)--字符串1

    C语言中字符串的定义 如果定义一个字符数组word,并使用大括号对其初始化,如下图所示: 但是这个不是C语言的字符串,只是字符数组,不是字符串,因为不能使用字符串的方式进行计算.那么C语言的字符串长什 ...

  9. 听翁恺老师mooc笔记(6)--指针运算

    指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0- ...

随机推荐

  1. 手机浏览网页或打开App时莫名弹出支付宝领红包界面的原因及应对措施

    自从支付宝推出扫码领红包活动后,这种模式独特的赏金机制,短时间内吸引了大量的关注,但是随之也产生了很多的问题,比由于如在赏金的驱动下,微信群里铺天盖地的红包口令,朋友圈里各式各样的领红包二维码图片, ...

  2. canvas焰火特效

    之前在抖音上看到了一个很漂亮的焰火效果.这会儿有时间就用canvas实现了一下. 演示地址:http://suohb.com/work/firework4.htm 先看效果:(静态图片看不太出效果,请 ...

  3. 试着讲清楚:js代码运行机制

    一. js运行机制 js执行引擎 经常看文章的说到js是带线程的,其实这个说法非常的模糊,准确的是js执行引擎是单线程的,js执行引擎就是js代码的执行器,有了这个概念就可以下来说说js是如何运行的了 ...

  4. LCT总结

    LCT总结 类比树剖,树剖是通过静态地把一棵树剖成若干条链然后用一种支持区间操作的数据结构维护(比如线段树.树状数组),而LCT是动态地去处理这个问题. 大家都知道树剖用线段树维护,而LCT用\(sp ...

  5. 近期安卓与IOS招聘面试有感

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.你总是想一步登天,却不知道路是一步步走出来的 大概是放年假前一个月开始招聘吧,陆陆续续到目前为止安卓面试10几个,IOS面试了15个左右,本以为 ...

  6. TP5 路由使用

    这里可以直接从第四条开始看 原文http://www.upwqy.com/details/12.html 1 文档链接 tp5路由官方文档  https://www.kancloud.cn/manua ...

  7. nodejs辅助前台开发系列(1) 搭建简单HTML开发环境

    搭建简单的html开发环境一般需要解决两个问题: 文本编辑器 WebServer集成 在文本编辑器选择上,VS Code 无疑是一匹黑马,谁用谁知道.WebServer集成nodejs对前端来说最为友 ...

  8. 23.Django基础

    Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...

  9. RESTful接口设计原则和优点

    RESTful架构优点: 前后端分离,减少流量 安全问题集中在接口上,由于接受json格式,防止了注入型等安全问题 前端无关化,后端只负责数据处理,前端表现方式可以是任何前端语言(android,io ...

  10. Unity性能优化的N种武器

    贴图: l  控制贴图大小,尽量不要超过 1024 x1024: l  尽量使用2的n次幂大小的贴图,否则GfxDriver里会有2份贴图: l  尽量使用压缩格式减小贴图大小: l  若干种贴图合并 ...