C语言基础扩充(一)

  C语言入门学的是谭浩强,至于这本书,如果只是为了考试学学还是不错的,但是若以后要从事编程工作与C打交道比较多的话,个人认为仅以此书入门是不够的。

  C primer plus 是本更不错的入门书籍,讲得很全面。所以这本书也比较厚...  系列文章参考于此书。

  

 printf() 函数基础扩充:

   想必大家的第一个C语言程序都应该是下面这个在屏幕上输出hello world 的经典程序吧。

    

#include<stdio.h>

int main()
{
   printf("hello world!");
}

  这里打印出的是一个字符串,当然我们也可以用printf来打印出其他参量。printf打印变量取决于参量的类型,例如在打印整数时使用%d符号,打印字符时用%c符号。这些符号叫做转换说明,它们指定了如何把数据转换成可显示的形式。

  切记给控制字符串后面的参数列表中的每个项目都使用一个转换说明,也就是转换说明要和参量一一对应,如

  

printf("a is %d, b is %d",a);    //错误

printf("a is %d, b is ",a,b);    //错误
printf("a is %d, b is %d",a,b)  //正确

   再而是要切记转换说明的类型要和参量的类型相匹配

#include <stdio.h>

int main(){  float n1 = 3.0;  double n2 = 3.0;  long n3 = 1234567890;  long n4 = 2000000000;    printf("%f %f \n",n1,n2);          //正确匹配  printf("%ld %ld \n",n3,n4);  printf("%ld %ld %ld %ld\n",n1,n2,n3,n4);  //错误匹配}

   上面代码运行结果如下(window7环境下, 其他平台环境上可能会有不同结果)

        

   可见第三个匹配错误的输出语句显示出了一些奇怪的数字,为什么会出现这样的结果呢,这个printf的输出机制和参数传递机制有关

   参数传递机制随实现的不同而不同,下面参数传递是在windows系统中的工作原理,如下面的函数调用

printf("%ld %ld %ld %ld\n",n1,n2,n3,n4); 

   该调用告诉计算机把变量n1、n2、n3、n4的值传递给计算机,计算机把他们放置到堆栈的一块内存区域中来实现。计算机根据变量的类型而非转换说明符把这些值放到堆栈中。所以在堆栈中n1占用8个字节(当被作为printf的参数时,float被转换为double),n2占8个字节,n3、n4分别占4个字节。

   然后控制转移到printf()函数,该函数从堆栈中把这些值读出来,但是在读取的时候是按照转换说明符去读的。%ld指出应该读取4个字节,所以printf()在堆栈中读取前4个字节作为他的第一个值,也就是n1的前半部分,被解释成一个long型,下一个%ld指出再读取4个字节作为第二个值,同理n1的后半部分也被解释成了一个long型。同样,%ld的第三个和第四个实例使得n2的前半部分和后半部被分别解释成long型。所以虽然n3和n4的说明符正确,但printf()仍读取了错误的字节。

   

  printf()的返回值:

    printf是有返回值的,它返回所打印的字符的数目(所有打印出的字符,包含空格,不可见的换行字符)。如果有输出错误,便会返回一个负数。

    其返回值是打印输出用途的附带功能,通常不怎么用。使用返回值得一个可能原因是检查输出错误,常用于向文件中输出而非向屏幕输出的情况。

                                                        参考:C primer plus

      

时间: 2024-12-09 15:33:54

C语言基础扩充(一)的相关文章

C语言基础扩充(二)

scanf()函数基础扩充: C函数库包含了多个输入函数,其中最常用的差不多就是scanf()了,它可以读取各种格式的输入. scanf()可以把输入的字符串转换成我们想要的各种形式,整数.浮点数.字符串等等,它是printf()的逆过程.和printf()一样都有控制字符串和参数列表,不同的是scanf()的参数列表是指向变量的指针. #include <stdio.h> int main() { int age; float height; char address[30]; printf

Swift语言指南(一)--语言基础之常量和变量

Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swift 提供了 C 与 Objective-C 中的所有基础类型,包括表示整数的 Int,表示浮点数的 Double 与 Float,表示布尔值的 Bool,以及表示纯文本数据的 String. Swift 还为两个基本集合类型 Array 与 Dictionary 提供了强大的支持,详情可参考 (集合类型)Collection Types. 与 C 语言类

C语言基础(转载自大海笔记)

# C语言基础2015年03月26日10:04:411.    语言排行榜C——java——objective-C2.    进制:进制:进位机制.用普通的话讲,应该为人为的定义一种度量来标识一样东西.计算机常用的进制有:十进制.二进制.八进制和十六进制.?    十进制:0-9(十个指头)(进制表示基数:10)?    二进制:0,1(基数为2)?    八进制:0-7(基数为8)?    十六进制:0-9,A-F(基数为16)    可以有很多进制,比如分钟为60进制等等.3.    位权为

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第1/5套:SQL语言之基础入门及环境准备.主要学习Oracle数据库SQL语言基础介绍.PL/SQL语言介绍.数据库SQL对象与数据类型介绍.SQL语言实战环境准备等. Oracle SQL语言之基础及环境准备,课程内容详细如下: Oracle数据库SQL语言基础介绍Oracle数据

02 java语言基础

常量:字面值常量(字符串,字符,整数,小数,布尔,null),自定义常量,''这个不是字符常量,""这个是字符串常量 进制: 02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 字符串常量 用双引号括起来的内容 整数常量 所有整数 小数常量 所有小数 字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号 布尔常量 较为特

嵌入式 Linux C语言——C语言基础

嵌入式 Linux C语言--C语言基础 一.数据类型 1.基本数据类型 数据类型是创建变量的模型.变量名是连续存储空间的别名,程序中使用变量命名存储空间,通过变量可以使用存储空间.变量所占的内存大小取决于创建变量的数据类型. 2.有符号和无符号 有符号数中数据类型的最高位用于标识数据的符号,最高位为1表示为负数,最高位为0表示为正数. 计算机中有符号数通常使用补码表示,正数的补码为正数本身,负数的补码为负数的绝对值的各位取反后加1. 计算机中无符号数通常使用原码表示,无符号数默认为正数,没有符

C#语言基础

第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了一个强大的.易用的.逻辑结构一致的设计环境.其特点: 语言简洁 保留了C++的强大功能: 快速应用开发功能: 语言的的自由性: 强大的Web服务器控件: 支持跨平台: 与XML相融合: 第二部分 C#语言基础: 一.C#项目的组成结构: 1.项目后缀 .config——配置文件(存放配置参数文件)

OC语言基础知识

OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程 二.类 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行类的

【quick-cocos2d-x】Lua 语言基础

版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速便捷了许多,下文只是lua这门语言的一个基础知识点,没有涵盖整个Lua的内容,但是作为对lua入门的初步了解还是可以的,由于内容精简了不少,所以语言上可能会有点跳跃,但是问题不大. 要了解一门语言,首先要了解的是语言的标识符.保留字.常量和变量,命名规范和注释以及数据类型等.然后是运算符.控制流语句