C学习笔记:基础

C 语言是一种面向过程的高级语言。 运行速度与汇编语言编写的代码运行速度几乎一样。C 语言的源码文件扩展名为 .c 例如 hello.c

概述

C 语言有三套标准分别是 C89 C99 C11,目前最常用的是 C99 标准。

C 编译器,写在源文件中的源代码需要编译,转化为机器语言,这样 CPU 可以按给定指定执行程序。最常用的免费可用的编译器是 GUN 的 gcc 编译器,适合于 C 和 C++ 编程语言。

在 Linux 上安装 gcc 可以采用如下命令:

yum -y install gcc  
yum -y install gcc-c++ 

也可以手动编译,可以参考 gcc 官网。

安装完成后执行 gcc -v 可以查看编辑器版本信息。

先写一个 hello.c 文件,代码如下

#include <stdio.h>int main() {printf("Hello, World! \n");return 0;
}

 安装好 gcc 编译器后,在 hello.c 文件所在的目录下打开命令行,执行 gcc hello.c -o hello 然后会生成一个 hello.exe 文件(在 windows 环境下,如果不加 -o hello,那么默认会生成一个 a.exe),然后执行 hello.exe,即可看到屏幕显示 Hello World。

数据类型

C 语言中数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。C 中数据类型分为:

  • 基本类型
    • 整数类型 char int
    • 浮点类型 float double
  • 派生类型
    • 指针类型 Pointer
    • 数组类型 Array
    • 结构类型 Struct
    • 共用体类型 Union
    • 函数类型 Function
  • 枚举类型
  • void 类型

以上为 C 中数据类型。

变量和常量

变量的定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。

变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编辑器需要实际的变量声明。

变量的声明有两种情况:

  • 一种需要建立存储空间的。例如 int a 在声明的时候就已经建立了存储空间。
  • 另一种需要建立存储空间,通过使用 extern 关键字声明变量名而不定义它。例如:extern int a 其中变量 a 可以在别的文件中定义。
  • 除非有 extern 关键字,否则都是变量的定义。

常量是固定值,在程序执行期间不会改变。又称字面量。常量分为整数常量、浮点常量、字符常量、字符串常量。

定义常量两种方式:

  • 使用 #define 预处理器
  • 使用 const 关键字

运算符和函数

运算符分为算术、关系、逻辑、位、赋值运算符等。

判断结构和循环结构和 Java 类似。

函数也和 Java 类似,只是在 Java 中称为方法。但是在函数参数上面稍有区别。

C 语言中调用函数时,有两种向函数传递参数的方法:

  • 传值调用 把参数的实际值复制给函数的形式参数,修改函数内的形式参数不会影响实际参数。
  • 引用调用 通过指针传递方法,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。

指针

个人认为,C 和 Java 最大的区别之一就是 C 有指针的概念。

每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。

#include <stdio.h>int main() {int var = 20;   /* 实际变量的声明 */int *ip;        /* 指针变量的声明 */ip = &var;  /* 在指针变量中存储 var 的地址 */printf("Address of var variable: %p\n", &var);/* 在指针变量中存储的地址 */printf("Address stored in ip variable: %p\n", ip);/* 使用指针访问值 */printf("Value of *ip variable: %d\n", *ip);return 0;
}

函数指针是指向函数的指针变量。 函数指针变量的声明 typedef int (*fun_ptr)(int, int)

#include <stdio.h>int max(int x, int y) {return x > y ? x : y;
}int main(void) {/* p 是函数指针 */int (*p)(int, int) = &max; // &可以省略int a, b, c, d;printf("请输入三个数字:");scanf("%d %d %d", &a, &b, &c);/* 与直接调用函数等价,d = max(max(a, b), c) */d = p(p(a, b), c);printf("最大的数字是: %d\n", d);return 0;
}

C 语言也可以接受函数作为参数。 

预处理器 与头文件

预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已。它们会指示编译器在实际编译之前完成所需的预处理。可以把 C 预处理器(C Preprocessor)简写为 CPP。

头文件是拓展名为 .h 的文件名,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:自己编写的头文件和编译器自带的头文件。

引用头文件的语法:

  • #include <file> 引用系统头文件
  • #include "file"  引用用户头文件

编写预处理器放在头文件中,可被多个文件引用。

错误处理

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示函数调用期间发生了错误。可以在 errno.h 头文件中找到各种各样的错误代码。

 

INSERT

转载于:https://www.cnblogs.com/colin220/p/10977632.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/448572.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/448572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-boot

1,创建springboot 工程 2.导入你所需要的包, (这篇只是简单介绍一下,没导入太过复杂的包)Developer tools Sprig Boot DevTools LombokWed Spring Wed Starter 转载于:https://www.cnblogs.com/lxx-1843693653/p/11104622.html

李洋疯狂C语言之合法帧

题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧 #include <stdio.h> #include <string.h> #include <stdlib.h>ch…

vuex 最简单、最详细的入门文档

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 。 我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时…

科目三路考操作要点

一踏&#xff08;离合器&#xff09;二挂&#xff08;挡&#xff09;三拨&#xff08;左转向灯&#xff09;四看&#xff08;左右镜及侧头观察周边情况&#xff09;五按&#xff08;喇叭&#xff09;六松&#xff08;闸&#xff0c;即手制动&#xff09; 在科目三考试途中的注…

10种顶级javascript框架比较-The Top 10 Javascript MVC Frameworks

转载于&#xff1a;http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/ Gordon L. Hempton是西雅图的一位黑客和设计师&#xff0c;他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架&#xff0c;并在博客中总结了每种框架的优缺点&am…

数据结构之顺序表(一)

有关顺序表&#xff0c;由于代码太长&#xff0c;我将分成2部分&#xff0c;这边是头文件SeqList.h和主函数&#xff1a; #ifndef __SEQLIST_H__ #define __SEQLIST_H__#define FALSE -1 #define TRUE 0#define INIT_SIZE 100 #define INCRESS_SIZE 20typedef int Seq…

centos7 安装 node.js 运行环境、卸载

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一.安装 1.进入官网下载最新版本 https://nodejs.org/en/ 选择下载后上传或直接使用wget下载 wget https://nodejs.org/dist/v8.11.…

白云山脚下的廉价菜-饮胜酒家

亚运将至&#xff0c;我们已经渐渐感受到那种气氛了&#xff0c;最明显就是搭公交车不用钱&#xff0c;我可以不再做那辆兜路的54路车&#xff0c;每天可以睡多10分钟&#xff0c;然后从家楼下转3趟车上班&#xff0c;重要部部都有位置坐&#xff0c;每天在路上都看到有好多好多…

科目三考试指南

正在准备科目三的您&#xff0c;对顺利通过考试有信心吗&#xff1f;今天&#xff0c;小编为大家带来科目三靠边停车技巧&#xff0c;通过讲解靠边停车考试要求&#xff0c;让学员更好地掌握相关技巧&#xff0c;希望能帮到大家。 靠边停车考试项目中规定&#xff0c;车前保险杠…

docker学习4-docker安装mysql环境

前言 docker安装mysql环境非常方便&#xff0c;简单的几步操作就可以了 拉取mysql镜像 先拉取mysql的镜像&#xff0c;可以在docker的镜像仓库找到不同TAG标签的版本https://hub.docker.com/_/mysql?tabtags 我这里选择mysql:5.7标签 [rootyoyo ~]# docker pull mysql:5.7 5.7…

数据结构之顺序表(二)

这是接着之前的剩下来的部分&#xff1a; #include <stdlib.h> #include "SeqList.h" #include <stdio.h>SeqList *Create_List() {//创建一个顺序表SeqList* s (SeqList*)malloc(sizeof(SeqList)/sizeof(char));if (NULL s){return NULL;}//初始化顺…

Dynamics CRM 2015 站点地图公告配置实体显示名称的变更

CRM更新2015后&#xff0c;在设置里找不到公告配置了 在原来的位置上你会东西一个叫活动源配置的东西&#xff0c;点开看后就是原来的公告配置。 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 转载于:https://www.cnblogs.com/VicTang/p/4799531…

解决:liunx 光标消失(显示光标)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 2个命令可以管控光标&#xff1a; 隐藏光标 &#xff1a; echo -e "\033[?25l" 显示光标 &#xff1a; echo -e "\0…

科​目​三​路​考​操​作​步​骤

科目三路考操作步骤 一、起步前五大操作顺序&#xff1a; 1.检查手制动是否拉紧 2.踩下离合器踏板&#xff0c;挂空挡 3.开汽车电源 4.轻踩油门&#xff08;电喷车不需要&#xff09;&#xff0c;接通马达 5.发动后&#xff0c;手马上离开 二、起步顺序6个步骤&…

漫谈微服务架构:什么是Spring Cloud,为何要选择Spring Cloud

Spring Cloud是基于Spring Boot的&#xff0c;因此还在使用SpringMVC的同学要先了解Spring Boot。先上一段官话&#xff0c;Spring Cloud是一个基于Spring Boot实现的云应用开发工具&#xff0c;它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、…

数据结构之头指针链表de三种插入方式(头插法,尾插法,在pos处插入)

1、头插法&#xff1a; 流程&#xff1a;1 &#xff0c;判断传入数据是否正确 2&#xff0c;如果正确则创建一个新的节点&#xff0c;并判断节点是否创建成功 3&#xff0c;然后给节点成员变量赋值 4&#xff0c;最后让新节点变为链表的第一个节点。 代码实现: // 链表的头插…

c# 科学计数法值转换成正常值,返回字符串

/// <summary>/// 科学计数法值转换成正常值/// </summary>/// <param name"value"></param>/// <returns></returns>public string ValueScientificNotationConvert(JToken value){if (value null) return "";var …

使用 Docker 部署 Node 服务

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 前言   Docker 是一个开源的容器引擎。开发者可以将自己的应用以及依赖打包为一个可移植的容器&#xff0c;然后发布到 Linux 机器上。…

科目三电子考的通过率普遍偏低

据调查&#xff0c;科目三电子考的通过率普遍偏低&#xff0c;是学员们公认的最难考项目。今天小编要通过自己的所看所听分析科目三电子考通过率低的三大原因。 原因一&#xff1a;考生基本功不扎实 从历年来考试失败的理由中&#xff0c;可以发现&#xff0c;大多都出现上车、…

打印python包含汉字报SyntaxError: Non-ASCII character '\xe4' in file

因为本人主要使用Scala语言&#xff0c;但是之前同事包括老大都是使用python&#xff0c;加上python在spark的使用中的确越来越受欢迎&#xff0c;所以最近准备入坑python&#xff0c;但是装完写demo的时候出了问题&#xff0c;如下&#xff1a; 查了下发现&#xff0c;这是pyt…