《c与指针》读书笔记之第一篇

#include<stdio.h>/*这是标准输入输出的预处理头文件。意思是将这个头文件加入到这个源文件中*/
#include<stdlib.h>/*这是c、c++的系统函数头文件,里面包含五种类型,及一些宏及常用工具等*/
#include<string.h>/*这是字符串处理的头文件,虽然c语言不怎么用它。但是c++经常使用*/
#define MAX_COLS 20/*这是一个宏定义,意思是把源文件中所有20用MAX_COLS代替,目的是为了修改方便。*/
#define MAX_INPUT 1000
/* 以上为预处理指令*/


int read_column_numbers(int columns[],int max);
void rearrange(char *output,char const *input,int n_columns,int const columns[])
/*这是两个函数原型,也可以说是声明。*/

int main()
{
	int n_columns[];
	int columns[MAX_COLS];
	char input[MAX_INPUT];
	char output[MAX_INPUT];
	/*读取该串列标号*/

	n_column=read_column_numbers(columns,MAX_COLS);
	/*读取及处理,打印剩余的输入行*/

	while(gets(input)!=NULL)
	{
		printf("original intput :%s\n",input);
		rearrange(output,input,n_columns,columns);
		printf("rearrange line:%s\n",output);
	}
	return EXIT_SUCCESS;
}



int read_columns_numbers(int columns[],int max)
{
	int num=0;
	int ch;
	/*取得列标号,如果这个数小于0停止*/
	while(num<max && scanf("%d",&columns[cum])==1 && conlumns[num]>=0)
		num+=1;
	if(num%2!=0)/*确定其为偶数个,它们以对的形式出现*/
	{
		puts("last column number is not paired.");
		exit(EXIT_FALURE);
	}
	/*处理输入行,将指定字符连接在一起,输出行以null结尾*/
	while((ch=getchar())!=EOF && CH!='\n')
		      ;
	return num;
}
void rearrange(char *output,char const *input,int n_columns,int const columns[])
{
	int col;
	int output_col;
	int len;

	len=strlen(input);
	out_col=0;
	/*处理每对列标号*/
	for(col=0;col<n_columns;col+=2)
	{
		int nchars=columns[col+1]-columns[col+1];
		if(columns[col]>=len ||output_col==MAX_INPUT-1)
			break;
		/*如果输出行数据空间不够,只复制可以容纳的数据*/
		if(output_col+nchars> MAX_INPUT-1)
			nchars= MAX_INPUT-output_col-1;
		strncpy(output+output_col,input+columns[col],nchars);
		output_col+=nchars;
	}

c与指针是c和c++的经典著作。是迄今为止全世界公认的最好的c入门书籍之一。曾被accu主席francis先生强力推荐。这本书不仅适合一般的程序员,还适合广大c和c++的初学者。和在校大学生。

                                                                                                                                                                                              ---------备注

    本人也是第一次读这本书,由于受到老师的推荐,才决定仔细研读。下面是这本书的第一篇读书笔记及感悟。主要包括前两章内容:快速上手和基本概念。

一:快速上手

本章内容主要讲述了c语言的基本构成及特性及相关注意事项。书中通过一个C语言例程向我们展示了c的结构和工作历程。目的是给你一对c的整体印象。这个例程告诉你c是如何实现的,介绍c的基础知识。

最上面是这个例程的代码:(相关代码的解释已在注释中阐述);

下面是分列出的重要的几点:

1:注释

注释一般以/*开头,以*/结尾,注释的目的是对程序进行解释和说明,便于读者更快理解这段程序,增加其可阅读性。需要注意的是注释不能嵌套,要秉承一对一的原则,千万不能乱。另外,很多人习惯于注释掉不要的代码,(包括我自己),这个习惯是不好的,有些时候会出差错的,最好的办法都是用:

#if 0

      语句

#endif

这样的话,处理比较安全。

2“预处理指令

在源代码中的注释里已经稍微解释了。一般,预处理指令是有预处理器解释的,由他读入源代码。在预处理指令中,还有一个小技巧,就是如果一个声明用于多个源文件的话,可以用#include指令把他包起来,这样就不要反复写这个声明了。

3.main函数

main函数是每个程序所必须的,他是每个函数执行的起点。

int n_columns[];
	int columns[MAX_COLS];
	char input[MAX_INPUT];
	char output[MAX_INPUT];
这几行代码中有关键字int,意思是执行的返回类型是int整形,而char是返回字符型的,另外void不返回任何参数,俗称为空类型。

n_column=read_column_numbers(columns,MAX_COLS);
这个语句是一个函数调用语句,一般来说,数组都是以引用的形式传递给形参的。而传递分为按值传递和按址传递。本例句中的max-cols是一个值传递。

c语言的规则是所有的函数传递都是以值传递的形式进行的。

最后几点总结:

使用#include指令避免重复声明;

使用#define给常量值起名;

在#include中放置函数原型;

在使用下标前先检查他们的的值;

在使用数组是要检查是否越界;

二:

基本概念

这一章主要讲述了C语言的使用环境,语法规则,以及使用风格。

1 使用环境

在c'的任何使用环境里,都存在两种不同的环境,一是翻译环境,二是执行环境。翻译环境是指将源代码翻译成用来可执行的代码。执行环境它用来执行所执行的代码。另外,这两种环境不必再同一台机器上,比如说交叉编译器就是一个典型的例子。

翻译过程:翻译一般分为几个阶段,源文件通过编译器转化成目标代码,然后通过链接器将目标文件转化成可执行程序。第一阶段是预处理器处理,主要执行一些文本文件。然后源代码经过解析,判断语句的意思。一般错误和警告都出现在这。

2文件名约定

一般来说源代码都以.c形式保存在命名的文件中。由#include指令包含的源文件中的文件就叫做头文件,一般以.h保存。

对于目标文件名,在unix系统忠,以.o保存,在dos系统中以.obj保存。

3 编译与执行

c程序的编译命令在不同系统中不同,在unix系统中,c编译器为cc它以不同的方法调用。

编译和链接一个完整的c程序

cc   program.c

编译链接几个源文件

cc   main.c   sort.c   out.c

编译一个c源文件,并与目标文件链接在一起

cc   main.o  lookup.o  sort.c

另外,windows集成开发环境是一个独立的开发工具。还有dos页面与unix有几点不太:

它的名字是bcc;

目标文件是file.obj;

当单个源文件被编译时,编译器不删除目标文件;

执行过程分为几个阶段,首先将程序载入内存中,在操作系统中,这个任务自动完成,如果是独立环境,这个必须手工安排,也可以将他置于rom完成。在程序执行时。绝大都是程序将使用一个运行时堆栈,用于存储局部变量及地址。同时还可以使用静态内存。

2  语法规则

一个c程序一般由声明和函数组成。语法分为字符,注释,标识符等。

首先是字符。

c语言中的字符集主要包括大小写字母a-z,数字0-9‘,和一些常用符号。

! ”    # % ’ () *  + ,。/  :

;  <   >   = ?   [  ]  \  ^  _   {    }  | -

另外换行符是用于语句的结束,换行符也可以是一串字符。也可以当做单个字符处理。

转义字符

\a:警告字符

\b:退格字符

\f 进址字符

\n 换行字符

\r 回车符

\t 水平制表符

\v 垂直制表符

\ddd 表示八进制数值的字符

\xddd 八进制换成十六进制

标识符:

标识符表示变量,函数,类型的名字。它们由数字,字母,下划线,注意不能以数字开头。c语言关键字保留,一共有32个关键字。

auto double int struct break else long switch 

 

 

case enum register typedef char extern return union 

 

 

const float short unsigned continue for signed void 

 

 

default goto sizeof volatile do if while static


程序风格:

c语言是一种自由形式的语言,良好的编程风格至关重要,良好的编程风格可以提高程序可读性,以节省大量资金。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值