C语言入门的一些基本资源推荐和程序语法概览

为什么要学习C语言?

为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言?

选择一门编程语言,“为什么而学”这个目的是最重要的,目的不明确就没法学好。这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有动力。还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备之良友。

C语言相比C++的优点之一就是最小惊讶原则,一是一二是二,不会在私底下产生一些莫名其妙的额外产物。用C++做个例子,比如这样一个函数原型void PassWithClassValue(COneClass clsParam1),稍微了解C++的朋友都会知道,如果你没有实现COneClass的拷贝构造函数,编译器会好心的帮你实现一个,而且在调用这个函数PassWithClassValue的时候,偷偷地调用拷贝构造函数产生一个临时对象作为参数传递,对于某些情况,比如编写操作系统这类必须优化性能的情景下,这些自以为是的东西是非常邪恶的事情。

C语言本身只提供必要的语言特性,其它复杂一点功能如文件处理、数学计算等等都以库函数方式提供,甚至连malloc、free这种“必须有”的功能,也是以标准库函数的方式提供,而不是作为C语言核心出现。在伟大的著名的无所不包的《K&R》开头部分就提到了,for其实可以通过while来完成,只不过for可以写的更简洁,言外之意,对于C语言for其实不是必要的。跑题一点说,在其它程序语言中Lua可以说继承了C语言简洁的设计哲学,甚至连continue这种几乎必备的关键字都一直拒绝加入,在Lua的maillist以及wiki里都提到过continue这个问题,Lua语言维护者认为continue对于Lua而言不是必要的,也不考虑在后续版本中添加这个关键字。这种简洁哲学也让C语言的可移植性、便携性特别优秀,也使得很多嵌入式系统依然使用C语言作为主要编程工作语言。

Java语言有一个口号:“一次编写,处处运行”,就是跨平台这个噱头。实际上C语言从早期开始就几乎达到了“一次编写,处处编译”,在ANSI在1989年统一了C语言标准以后(称之为C89),只要特定平台上的编译器完整实现了C89标准,而且你的代码没有使用某些特殊的扩展(GCC以及微软都有自己的编译器特定扩展),那么代码一定可以编译通过,再实现一下操作系统相关的函数库,C语言的移植就是很简单的事情。可以用Lua作为例子,Lua本身是完全遵循C89标准,没有使用任何特定扩展,这也保证了有C语言编译器的平台,都可以编译使用Lua。可以编译运行C语言的硬件平台可以从A排到Z,真是非常有意思的事情。

C语言也是一个比较少见的应用领域极为广泛的语言。比如编写操作系统这种高难问题,只有C++、汇编语言可以做到。C语言可以编写服务器端软件如Apache、Nginx,或者编写GUI程序,如GTK。大多数程序语言的第一版是通过C语言实现,借助前面提到的“一次编写处处编译”,最大的保证了这些程序语言的可移植性。在Web开发领域,C语言的应用相对较少,这也是一种取舍的结果,Web开发需要使用PHP、Ruby、Python这样的动态语言,可以快速上线快速修改,可以最大程度满足用户时时变化的需求,这也是C语言的弱项。如果把程序语言的应用领域从硬件到管理软件、Web程序做一个很粗略从下到上的排列,C语言适合领域是比较底层靠近硬件的部分,而新兴语言比较偏重于高层管理或者Web开发这种相对贴近最终用户的领域。比较流行的混合开发模式是使用C语言编写底层高性能部分代码或后台服务器代码,而使用动态语言如Python做前端开发,充分发挥它们各自的优势力量。

提到C语言的缺点,常常是它缺少这种或者那种特性,比如有人建议加入GC,有人建议加入并行或者并发支持,有人提到没有一个比较完整的类似C++的异常策略。这些特性有的可以通过引入第三方库来实现,但C语言的设计哲学其实决定了它不会像C++那样“非常强大”。即使引入了某些人期望的特性,依然会是某些人喜欢某些人不喜欢的情形,现在的功能对于C语言应用领域来说已经够用,其它特性可以通过特定程序语言实现,并且通过C API与C语言编写的程序进行交互。任何一个工匠都不可能只使用一个工具完成他的工作,不同工具结合起来才能更快更好的完成任务。

提到C语言的API,也稍微介绍一下,我们知道windows操作系统的api也好,Linux的系统api也好,或者是想给Ruby、Python编写扩展模块,C语言形式的函数定义都是唯一的选择。C语言就好像是一个中间层或者是胶水,如果想把不同编程语言实现的功能模块混合使用,C语言是最佳的选择。

提了这么多关于C语言的好处,那么学习C语言是否适合就看你自己的判断了,例如要进行一个嵌入式项目,或者需要进行服务器端开发,或者写一个性能相关的组件等等,C语言都是比较好用的选择。另外也可以在C++的使用过程中有意的使用C语言的思考方式,汲取C语言简洁明快清晰地设计思路,对编程设计水平会有很大的提高。

C语言学习方法

C语言学习可以按照下面参考的顺序:阅读参考书,阅读代码,编写调试实际程序,上网参与讨论,研究高级话题。

学习语言的开始一般是阅读参考书。我建议选择几本非常经典的好书,仔细完整反复阅读几遍,“书读百遍其义自现”。选择C语言学习的好处是,这几本书基本上完整涵盖了C语言编程领域的方方面面,不会像C++那样,即使读完一堆书还是有些糊涂,依然有这样那样难懂的陷阱。

1. 参考书籍

在豆瓣上列了一个书单,大家可以直接参考http://book.douban.com/doulist/636329/。在下面简单点评一下,阅读顺序最好参照列出的顺序。

《The C Programming Language》http://book.douban.com/subject/1230004/:如果你只想买一本书学习C语言,只需要买这一本就够了。如果你经费足够,建议你多买几本,办公室、家里都放上一本,随手都可以翻翻。用三个词语来形容它就是:经典!经典!经典!这本薄薄的只有二百多页的小书涵盖了C语言的方方面面,前无古人而且后无来者,任何溢美之词都不足以形容它。

《The C Programming Language》(后面称为 K&R)里面包含了一个简单的语法解析器,包含了malloc如何实现,包含了一个完整的操作系统目录浏览程序,这些程序的实用性极高,可以这样说,如果学习任何一门语言能够自己独立动手实现以上的功能,基本上就可以算是入门了。K&R书里面每段都蕴含着非常值得探究的软件开发工程实践经验,如果没有一定的开发经验,其实是看不出来这些冰山下面的内容的,比如开头一章就提出用写完整代码这种方式来教学,而在书中那些C语言的陷阱或者可能出问题的地方,都有提到,但是由于篇幅所限,写的非常简约,很难让人一下就看懂。我正在完整的逐字逐句的阅读此书,希望能稍作注解,写几篇博客分享一下。

《C程序设计语言(第2版·新版)》http://book.douban.com/subject/1139336/:这是K&R的中文译本,可以先从中文译本看起,然后再读一遍英文原版,既可以学习英文,又可以体会原文那种简约优美的风格。

《C陷阱与缺陷》http://book.douban.com/subject/2778632/

《C专家编程》http://book.douban.com/subject/2377310/

这两本书也是学习及使用C语言的朋友必备的两本书,比如《C专家编程》,专门用两三个章节详细介绍C语言中数组与指针的不同之处,这两本书在某种程度上算是对K&R略过的地方做了详细补充,强烈推荐。

《C语言参考手册》http://book.douban.com/subject/2132084/:这是最后一本强烈推荐你最好买回家作为案头书必备的参考书。前面几本书或者稍显简略,或者专注某个特定专题,都不适合遇到问题时翻查。这本《C语言参考手册》可以看作是C语言编程的《新华字典》,全面而权威。里面还涵盖了C99的内容,紧跟时代潮流。

下面几本书都可以作为交叉参考,也都很有价值,也是建议大家都买下来,好书如朋友,日久弥新,像是我推荐的这几本书在douban或者amazon上评分都非常高,而且反复再版。

《C和指针》http://book.douban.com/subject/1229973/:指针的重要性如何,学过C语言(或者C++)的朋友都知道,这本书更是把指针拔高到了与C语言平起平坐的地位,其实也是从头开始介绍,作为教学参考书也是可以的。

《C标准库》http://book.douban.com/subject/3775842/:这本书是专门介绍C语言的标准库如何实现的,比如malloc算法,用标准的C语言该如何写?strlen这个函数应该如何实现?尽管书中不少代码与真实的C标准库相差很多(由于标准库需要考虑性能优化,很多函数有一些特定的trick),但是绝对值得参考。

《你必须知道的495个C语言问题》 http://book.douban.com/subject/3422332/:这本书其实就是C-FAQ的印刷版本,C-FAQ在各种编程语言的FAQ中可以称得上质量一流。如果你想应聘或者招聘C语言相关程序员,这本书一定要参考。

《Linux C编程一站式学习》http://book.douban.com/subject/4141733/:这本书是基于特定操作系统Linux来介绍C语言编程,可作为计算机相关专业的教科书或入门参考书,也是书单里面唯一一本国人原创的编程书籍,非常难得。书中几乎所有内容都在网上直接公开,针对读者的意见进行修改,这也是非常难得的一种开放态度。非常推荐大家买一本。

学习C语言,一定不能只读书,应该动手练习完成书里面的项目需求(比如编写一个目录浏览器)以及每章的练习题目。这就需要有可以实验的环境,下面针对不同操作系统简单做一下介绍。

2. 动手实验环境搭建

也没有调查过,不知道现在学校里学习C语言是不是依然跟着谭浩强老师用TurboC2.0编程,如果还是这个组合的话,那就太差劲了,赶快抛开它们。

下面主要介绍不同操作系统平台下的集成编程环境,基于初学者以及我个人喜好,就不推荐大家命令行下用vim编程了,直接上IDE。

Windows系统下推荐大家使用Code::blocks这个软件。这个软件最大优点是自带了基于mingw的GCC以及GDB,只要下载70M左右软件包,就可以完整支持C++、C语言编程了。各种功能(比如调试功能)也很强大,版本更新也比较快。注意下载选择名字有mingw的文件,比如最新版本是codeblocks-10.05mingw-setup.exe(版本也许有所不同)。主页:http://www.codeblocks.org/

如果需要做Windows操作系统的开发,可以下载Visual C++ 2010 Express。

因为Code::Blocks不包含Windows编程头文件(实际是因为没有Windows SDK),无法编写Windows操作系统相关的界面应用程序或者服务类程序。而VC++Express自带了这些头文件以及编程库,虽然功能稍微简陋,但对于练习使用基本够用。主页:http://www.microsoft.com/express/windows/

对于计算机专业的学生朋友,建议大家使用Linux操作系统,或者更详细一点是使用Xubuntu操作系统作为桌面,使用Netbeans和GCC这个组合(当然也可以选择Code::Blocks)。在Xubuntu下可以通过apt-get install build-essential这个命令安装gcc相关程序,已经可以在Terminal下编译C语言程序了,但为了使用方便,大家可以选择Netbeans的C++支持包,在Netbeans网站上就能下载。主页:http://netbeans.org/features/cpp/index.html

如果使用苹果Mac系统,毫无疑问XCode就是编程的绝佳选择,XCode可以在苹果开发者网站上免费下载,在IPhone SDK中也包含了XCode。主页:http://developer.apple.com/technologies/tools/xcode.html

如果手头没有合适的编程环境,还需要实验一些简单的代码,可以用http://codepad.org/ 提供的服务,在线编写运行代码。

另外建议大家申请一个github.com的账号,在gist.github.com可以保存自己的练习代码,就不需要随身带着U盘了。

3. 网络资源

如果想用十分钟时间了解一下C语言的来龙去脉、前世今生,维基百科这个页面http://en.wikipedia.org/wiki/C_%28programming_language%29 是最佳选择。

从维基百科可以看到,C语言1972年由Dennis Ritchie设计的命令式、结构化范式编程语言。类型为静态的弱类型,需要显式定义。最新国际标准为C99。设计上主要受到了B、ALGOL68、汇编语言、PL/I、FORTRAN的影响,C语言也影响了大量编程语言,如C++、Objective-C、C#、Java、Go、PHP、Python等等(个人觉得受C影响很大的是PHP,基本上有C编程基础的程序员,很容易就能上手PHP了,除了PHP的OO部分)。

在维基百科条目中有很大篇幅介绍了作者认为C语言缺失的特性,比如面向对象、多线程、GC、异常处理等等,当然这有些吹毛求疵,如果需要这些特性,完全可以用其它程序语言。另外一个介绍的重点是“未定义行为”,有些我们认为理所当然的结果,其实在C语言标准中并没有明确定义,假定这些行为应该如何,当程序使用另外的编译器或者不同版本编译器编译运行,都可能有bug产生。

接下来维基百科条目谈到了C语言的用处,必须承认尽管现在编程语言成百上千,能称之为“系统级”的少之又少,新兴语言中只有Go还能称得上。现在大规模软件项目中完全选用C语言可能性不大,但是核心部分完全可以用C搭建,相对C++开发工具的高昂价格,C语言相关的免费辅助开发软件非常丰富,比如splint,valgrind,不少核心库经过长期使用也都非常稳定。

由于C语言广泛支持各种平台以及编译器相对成熟可靠,不少编程语言选择C语言作为一个中间层,比如Glasgow Haskell编译器就是这样做的。

另一个可以找到大量C语言编程相关资料的地方是“美味书签”,通过搜索特定关键字 (C + programming)就可以找到很多值得挖掘的资源http://delicious.com/search?p=c+programming。还可以参考dmoz.org的C语言分类http://www.dmoz.org/Computers/Programming/Languages/C/ 相比美味书签时效性能差点,但是分类比较系统,查找也要容易一些。

程序员往往是懒惰的,“拿来主义”、“拷贝主义”很流行也很有效,当对某个函数或者关键字不是很理解的时候,看看别人是怎么使用的,会非常有启发性。这里介绍几个常用的代码搜索网站,最常用的是google的codesearch:http://codesearch.google.com ,可以通过不同条件及正则表达式搜索特定关键词。另外可以参考维基百科上一个“带有C语言示例的文章”分类,里面代码写的也很不错。还可以在github.com上搜索相关项目。在前面博客文章我还介绍了一个名为罗塞塔代码的网站http://rosettacode.org/ 这个网站上可以找到不同程序语言针对某个问题的解决方案,用于学习比较非常便利。

学习编程也需要大量阅读名家经典代码,与学中文英文需要大量阅读名著一个道理,C语言编程优质项目那是“彩旗飘舞,人山人海”,个人建议可以看看Lua、Sqlite、Nginx这些项目的代码,代码量不多,而且代码质量也都比较高。另外可以看看Linux内核代码,坊间有不少书籍可以帮助解读。关于如何很好的阅读代码,大家可以参考《Code Reading》这本书。

书看了几本,代码写了一些,也略微读了读其他人的代码,就应该用C语言来完成真实工作中碰到的问题,让C语言真正成为你的瑞士军刀。只有当你经常使用C语言来进行编程工作,经常思考如何通过C设计一个优雅高效的系统,才能更深刻的理解C语言设计哲学。

还可以到http://stackoverflow.com 参与回答问题,浏览其他人的问题解答来汲取知识,比如这篇http://stackoverflow.com/questions/2054939/char-is-signed-or-unsigned-by-default 就介绍了一个C语言关于char类型的小陷阱。

C语言学习当中,有一些难点需要多加注意,如pointer与array的不同之处,复杂类型定义如何解读,如何正确使用预处理preprocessor以及宏定义。其实这些内容在前面书籍都是反复提到,如果按部就班学习下来,应该不成问题。

当C语言学习的差不多时候,还可以学习一门动态语言,比如Lua或者Python,试着在实际工作项目中混合使用动态语言与C语言,一加一发挥出来的力量不仅仅是二,而是非常二(说笑一下,哈哈)。


C的程序代码写法初窥
C语言入门很简单,因为常用的语法结构就那么几个,下面列举一些这些语法结构的简单程序例子,可以对C语言进行快速复习。程序包含使用 bool 变量、字符、常量、数学函数、特殊字符、for循环和函数等等。

1. 使用 bool 变量

#include <stdio.h>
#include <stdbool.h>
int main(void)
{
  float input;
  bool isTrue=(scanf("%f",&input)==1);
  while(isTrue){
    printf("you typed %.d\n",(int)input);  //强制类型转换
    isTrue=(scanf("%f",&input)==1);
  }
  return 0;
}

2. 字符

#include <stdio.h>
#include <stdlib.h>
int main()
{
  char beep;  //与 int beep; 等效
  while(scanf("%c",&beep)==1){
    printf("you typed a %c \n", beep);
  }
  //scanf 会将回车符一起读进变量,最后结果不能达到预期!可采用后面一种方法
  return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
  char beep;
  while(gets(&beep)){
    printf("you typed a %c \n", beep);
  }
  return 0;
}

3. 常量

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
#define PI 3.1416
#define TEXT "hello world"
#define HTML 'H'
int main()
{
  //常量定义 以及C预处理器 系统预定义常量
  const int china =345;
  printf("%d ,%d ,%d ,%d\n", INT_MAX, china, FLT_MAX_10_EXP, CHAR_MIN);
}

4. 数学函数

#include <stdio.h>
#include <math.h>
#define PI 3.1415926
void main(void)
{
  //i 为第几行,画余弦曲线
  int i, j, blankNUm;
  float cosValue;
  for(i=0;i<21;i++){
    cosValue =1-i/10.0;
    blankNUm =(int)(180/5/PI*acos(cosValue));

    for(j=0;j<blankNUm;j++)
      printf("");
    printf("*");
    for(j=0;j<(73-2-2*blankNUm);j++)
      printf("");
    i!=20?printf("*\n"):printf("");
  }
  return 0;
}
#include <stdio.h>
int main(void)
{
  //计算 e ,前50项,其实根前10项结果一样,只是为了演示,用double可以满足精度要求
  int i;
  double factorial=1.0, e=0;
  for(i=1;i<=50;i++){
    factorial*=i;
    e+=1.0/factorial;
  }
  printf("%f \n",e);
  return 0;
}

5. 特殊字符

#include <stdio.h>
#include <stdlib.h>
int main()
{
  float salary;

  printf("\aplease enter you salary by month:");  // \a响龄,貌似
  printf(" $______\b\b\b\b\b\b");  // \b退格
  if(scanf("%f",&salary)==1){
    printf("\t$%.2f per manth is $%.2f per year", salary, salary*12.0);
    printf("\rgEE!wa h\n");  // \r使光标移到当前行的起始位置,这里很微妙噢
  }

  return 0;
}

/* please enter you salary by month: $23.4__ */
/* gEE!wa h$23.40 per manth is $280.80 per year */

6. for循环

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int k;
  for(k=1,printf("%d:hi \n",k);printf("k =%d \n",k),k*k<26;
    k+=2,printf("now k =%d\n",k))
  {
    printf("k is %d in the loop \n",k);
  }
  return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int i;
  int word[8];
  for(i=0;i<8;i++){
    word[i] =pow(2,i);
  }
  i =0;
  do{
    printf("%d ",word[i]);
  }while(++i<8);
  return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int i;
  double arr1[8],arr2[8];
  for(i=0;i<8;i++){
    scanf("%lf",&arr1[i]);
  }
  arr2[0] =arr1[0];
  for(i=1;i<8;i++){
    arr2[i] =arr2[i-1] +arr1[i];
  }
  for(i=0;i<8;i++){
    printf("%.2f\t",arr1[i]);
  }
  printf("\n");
  for(i=0;i<8;i++){
    printf("%.2f\t",arr2[i]);
  }
  return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int i,max;
  while(scanf("%d",&max)==1){
    double sum1=0,sum2=0;
    for(i=1;i<=max;i++){
      sum1+=1.00/i;
      i%2==0 ?(sum2-=1.0/i):(sum2+=1.0/i);
    }
    printf("sum1= %lf sum2= %lf\n",sum1,sum2);
  }
  return 0;
}


7. 函数

#include <stdio.h>
#include <stdlib.h>
int square(int s);
void echo(void);
int main()
{
  int i;
  for(i=0;i<10;i++)
  {
    printf("squire %d's value is%d\n",i,square(i));
  }
  printf("what\nNo/nBonzo?\n");
  echo();
  return 0;
}

int square(int s){
  return s*s;
}
void echo(void){
  printf("a function without input");
}
/*    another      */

#include <stdio.h>
#include <stdlib.h>
void one_three(void);
void two(void);
int main()
{
  printf("start now:\n");
  one_three();
  printf("done!");
  return 0;
}
void one_three(void){
  printf("one\n");
  two();
  printf("three\n");
}
void two(void){
  printf("two\n");
}
(0)

相关推荐

  • C语言函数语法详解

    1.概述 在C语言中,函数是来完成子程序或者某个模块的功能.有主程序或者其他函数调用,其他函数之间可以相互调用.同一函数可以被一个或多个函数任意次调用. 注意:     a.一个C程序有一个或多个程序模块组成,每一个程序模块作为一个源程序文件.一个源文件可以为多个C程序共用.     b.程序在编译时是以源文件为单位进行编译,而不是以函数为单位进行编译.一个源文件就是一个编译单元     c.C程序的执行是从main函数开始,也是在main函数中结束整个程序     d.所有函数是平行的,即在定

  • C语言的语法风格与代码书写规范指南

    C代码: #include <stdio.h> int main(void) { printf("That is Right Style\n"); return 0; } 在一个标准的C语言程序中,最特殊的莫过于main函数了,而说到底它就是一个函数而已,仅仅因为它地位特殊拥有第一执行权力,换句话说,难道因为一个人是省长它就不是人类了?所以函数该有的它都应该有,那么函数还有什么呢? 函数大体上分为内联函数(C99)(内联函数并非C++专属,C语言亦有,具体见前方链接)和非内

  • C语言入门的一些基本资源推荐和程序语法概览

    为什么要学习C语言? 为什么要学习.使用C语言?为什么要学习一个可能比自己都岁数大的编程语言? 选择一门编程语言,"为什么而学"这个目的是最重要的,目的不明确就没法学好.这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因.因为学习的目的不明确,学习当然也没有动力.还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备

  • go语言入门环境搭建及GoLand安装教程详解

    Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型.编译型语言.Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算. Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

  • R语言入门之安装R和Rstuido软件

    安装R和Rstuido软件 R语言是用于统计分析,图形表示和报告的编程语言和软件环境:Rstudio是编辑.运行R语言的最为理想的工具之一. 1.官网下载R安装包 下载地址为:https://cran.r-project.org   进入链接,如下图所示,在页面顶部提供了三个下载链接,分别对应三种操作系统:Windows.Mac和Linux.请选择自己操作系统对应的链接,接下来我将以windows为例给大家展示安装过程. 接下来单击[Download R for Windows]-->[base

  • C语言入门之基础知识详解

    一.思维导图 内容不限于此思维导图 二.环境搭建 对于老手,自动跳过这一趴吧,或者也可以看一下我有没有啥纰漏,毕竟小白需要这一趴. 编译器很多,大部分老师会在学生学习C语言的时候推荐使用VC,不带语言提示器的那种,说是可以提高学生的编码能力.我也不知道到底是不是这么一回事儿.我推荐使用VS,这样学的快,函数记不住的问题很严重吗?项目的车轮碾压过去,再记不住也得记住吧!!! 更何况这个系列到后面是会有需要用文本文件编程写项目的阶段. 下载VS2019社区版,不要标新立异选那些最新版的,出了问题到时

  • C语言入门篇--局部全局变量的作用域及生命周期

    目录 1.变量的分类 1.1 局部变量 1.2 全局变量 1.3 知识点 1.3.1 就近原则 1.3.2 访问规则 1.3.3 有效范围 2.变量的使用 3.变量的作用域和生命周期 3.1 作用域 3.1.1 局部变量的作用域 3.1.2 全局变量的作用域 3.2 生命周期 3.2.1 局部变量的生命周期 3.2.2 全局变量的生命周期 1.变量的分类 1.1 局部变量 也称临时变量,在函数.代码块内定义,一般只可在代码块内部使用的变量. 1.2 全局变量 具有全局性,放在函数外,在同一___

  • C语言入门篇--学习选择,if,switch语句以及代码块

    目录 1.什么是语句 2.选择语句(分支语句) 2.1if语句&注意事项 2.1.1语法结构 2.1.2悬空else 2.2switch语句&注意事项 2.2.1语法结构 2.2.2switch语句中的break 2.2.3switch语句中的default语句 2.2.4switch语句的嵌套 3.代码块 1.什么是语句 语句:C语言中由一个 ; 隔开的就是一条语句. 例如: int a = 10; printf("haha\n"); 10; 'A'; ; //空语句

  • C# 语言入门基础介绍

    目录 一..NET 体系结构 二.Hello world 三.类型和变量 四.程序结构 前言: C#(读作"See Sharp")是一种新式编程语言,不仅面向对象,还类型安全. 开发人员利用 C# 能够生成在 .NET 中运行的多种安全可靠的应用程序. C# 源于 C 语言系列,C.C++.Java 和 JavaScript 程序员很快就可以上手使用. 本教程概述了 C# 8 及更高版本中该语言的主要组件. C# 是面向对象的.面向组件的编程语言. C# 提供了语言构造来直接支持这些概

  • Go 语言入门之net/url 包

    目录 引言 URL 格式 Go url 包函数使用格式 如何使用 URL 包 在 Golang 中对查询字符串进行 URL 编码 在 Golang 中对多个查询参数进行 URL 编码 在 Golang 中对路径段进行 URL 编码 通过对各个部分进行编码来构建完整的 URL 在 Golang 中解析 URL 处理相对路径 解析空格 判断绝对地址 解析端口 引言 在 Golang 中,将 URL 打包用于从服务器获取数据非常重要.只需了解您是否正在处理任何应用程序并且您想从任何外部位置或服务器获取

  • Go语言入门Go Web Fiber框架快速了解

    目录 Fiber 创建一个 HelloWorld Fiber 路由 Go Fiber 状态码 Go Fiber 发送短信 Go Fiber headers Go Fiber 发送文件 Go Fiber 教程展示了如何使用 Fiber 框架在 Golang 中创建简单的 Web 应用程序. Fiber是一个简单快速的 Go Web 框架. Fiber 专注于极致性能和低内存占用.它的灵感来自流行的 Express JS 框架. Fiber 创建一个 HelloWorld package main

  • Go语言入门学习之Channel通道详解

    目录 前言 通道的声明 通道的初始化 发送和接收数据 通道的关闭 通道的容量与长度 缓冲通道与无缓冲通道 双向通道和单向通道 遍历通道 fibonacci 数列 参考文章: 总结 前言 不同于传统的多线程并发模型使用共享内存来实现线程间通信的方式,go 是通过 channel 进行协程 (goroutine) 之间的通信来实现数据共享. channel,就是一个管道,可以想像成 Go 协程之间通信的管道.它是一种队列式的数据结构,遵循先入先出的规则. 通道的声明 每个通道都只能传递一种数据类型的

随机推荐