C之前上学学过,但是就会点基本语法,连指针都不会,根本就不能算会C。打算以C语言他爹Ritchie先生的C程序设计语言第二版为教材,fedora11下gcc编译器,gedit做编辑器把C语言重新学习一下。
导言部分主要是简单介绍是一个C语言的快速入门。
首先是传统的Hello world程序,这个没啥说的:
#include <stdio.h>
main()
{
printf("hello world\n");
}
在gedit中编辑保存为cpro.c后,控制台输入“gcc cpro.c",然后./a.out即可运行。
1.gcc如果要提示警告,可加参数-Wall。但是比较奇怪的是,如果函数调用时参数类型不符,居然也能编译过,但是其他朋友说他们机器是不行的,此问题有待查询,目前未搜到答案
2.每次都输入"gcc cpro.c"和"./a.out"运行太费事,可以编写shell脚本运行,方法gedit runc.sh,输入
gcc cpro.c -Wall
./a.out
之后只要运行sh runc.sh即可运行。
3.C语言中函数默认返回类型为int,但是不写return也不管。
然后是常量变量问题:
1.要注意#define haha 1000,末尾是没有分号的,这个容易顺手写错,写错后编译器会报错。
2.C原先没有bool型,要用int型,貌似C99标准中加入了stdbool.h就可以用了。
*EOF在linux中是ctrl+D,这个调试程序的时候经常用到。
再往下是数组,没字符串很痛苦,char s[]很不习惯。
最后是函数,函数中提到外部变量。外部变量在函数中使用应加extern显式声明一下,有两种例外情况:
1.如果外部变量定义在使用之前,可以不用extern声明。
2.如果变量在一个文件中定义,多个文件中使用,则需要用extern将使用的变量与之定义关联,通常放于头文件中。
3.void aa()和void aa(void)一样,但是ANSI C中,空参数表必须用void显式声明。
这个貌似是翻转字符串的练习题,有BUG,就写个大概意思
#include <stdio.h>
#define maxc 1000
void reserve(char k[],char rk[],int len);
int main()
{
char c;
char k[maxc],rk[maxc];
int i=0;
while ((c=getchar())!=EOF)
{
if (c!='\n')
{
k[i]=c;
i++;
}
else
{
k[i]='\0';
reserve(k,rk,i);
printf("%s\n",rk);
i=0;
}
}
return 0;
}
void reserve(char k[],char rk[],int len)
{
int i=0;
while (k[i]!='\0')
{
rk[len-i-1]=k[i];
i++;
}
rk[len]='\0';
}
计划一个月时间看完,平均一天要看6页左右,目前是5号,刚好看完第25页。