菜鸟教程-C 学习记录

C菜鸟教程:https://www.runoob.com/cprogramming/c-data-types.html

C 环境设置

mingw

C 程序结构

  • 预处理器指令
  • 函数
  • 变量
  • 语句&表达式
  • 注释

C 基本语法

  • 注释
/* 单行*/
// 单行
/*
多行
多行
*/
  • 标识符

C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。

C 数据类型

1 基本类型:
它们是算术类型,包括两种类型:整数类型和浮点类型。
2 枚举类型:
它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3 void 类型:
类型说明符 void 表明没有可用的值。
4 派生类型:
它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。

整数类型

在这里插入图片描述

浮点类型

在这里插入图片描述

C 变量

在这里插入图片描述

C 常量

#define
在这里插入图片描述

存储类

C程序可用存储类:

  • auto

auto 存储类是所有局部变量默认的存储类。
auto 只能用在函数内,即 auto 只能修饰局部变量。

  • register

register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。

  • static

static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。

  • extern

C 运算符

  • 算术运算符
+ - * % ++ --
  • 关系运算符
== != > < >= <=
  • 逻辑运算符
&&  ||  !
  • 位运算符
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A  = 1100 0011

A<<2 = 1111 0000
A>>2 = 0000 1111
  • 赋值运算符
= += -+ *= %= /= <<= >>= &= ^= !=
  • 杂项运算符
    在这里插入图片描述

C 条件和循环

在这里插入图片描述
在这里插入图片描述

C 函数

#include <stdio.h>
 
/* 函数声明 */
int max(int num1, int num2);
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;
 
   /* 调用函数来获取最大值 */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

C 作用域

  • 局部变量
  • 全局变量
  • 形参&实参

在 C 语言中,形参与实参虽然很简单,但是,是大家比较容易混淆的一个点,这里将为大家详细的讲解。
概念:从字面上理解,所谓形式参数即只只是声明了一个作为参数的变量,并未直接进行赋值使用,而实际参数则相反。
如下例

#include <stdio.h>

int test(int,int); // 形参,只声明

int main()
{
    int a,b;
    printf("%d",test(5,3)); // 实参,已赋值
}

int test(int a,int b) // 形参
{
    a=a+b;
    return a;
}

C 数组

数组初始化必须确定长度

C enum(枚举)

在这里插入图片描述

C 指针

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

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
NULL 指针是一个定义在标准库中的值为零的常量。

#include <stdio.h>
 
int main ()
{
   int  *ptr = NULL;
 
   printf("ptr 的地址是 %p\n", ptr  );
 
   return 0;
}
>>> ptr 的地址是 0x0

C 函数指针与回调函数

函数指针是指向函数的指针变量。以下实例声明了函数指针变量 p,指向函数 max:

#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;
}

回调函数

函数指针作为某个函数的参数
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。

简单讲:回调函数是由别人的函数执行时调用你实现的函数。

#include <stdlib.h>  
#include <stdio.h>
 
// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}
 
// 获取随机值
int getNextRandomValue(void)
{
    return rand();
}
 
int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("\n");
    return 0;
}

C 字符串

在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

在这里插入图片描述

#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str1[12] = "Hello";
   char str2[12] = "World";
   char str3[12];
   int  len ;
 
   /* 复制 str1 到 str3 */
   strcpy(str3, str1);
   printf("strcpy( str3, str1) :  %s\n", str3 );
 
   /* 连接 str1 和 str2 */
   strcat( str1, str2);
   printf("strcat( str1, str2):   %s\n", str1 );
 
   /* 连接后,str1 的总长度 */
   len = strlen(str1);
   printf("strlen(str1) :  %d\n", len );
 
   return 0;
}

C 结构体

结构体的定义

//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//同时又声明了结构体变量s1
//这个结构体并没有标明其标签
struct 
{
    int a;
    char b;
    double c;
} s1;
 
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//结构体的标签被命名为SIMPLE,没有声明变量
struct SIMPLE
{
    int a;
    char b;
    double c;
};
//用SIMPLE标签的结构体,另外声明了变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
 
//也可以用typedef创建新类型
typedef struct
{
    int a;
    char b;
    double c; 
} Simple2;
//现在可以用Simple2作为类型声明新的结构体变量
Simple2 u1, u2[20], *u3;

结构体变量的初始化

#include <stdio.h>
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book = {"C 语言", "RUNOOB", "编程语言", 123456};
 
int main()
{
    printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id);
}

指向结构的指针
在这里插入图片描述

位域

在这里插入图片描述
在这里插入图片描述

C 共用体(union)

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。

C typedef

在这里插入图片描述

C 输入输出

  • %f
  • %d
  • getchar()
  • putchar()
  • gets()
  • puts()
  • scanf()
  • printf()

C 文件读写

在这里插入图片描述

C 文件读写

  • fputc
  • fputs
  • fprintf
  • fgetc
  • fgets
  • fopen
  • fclose

C 预处理器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

C 头文件

头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。
建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。

C 强制类型转换

在这里插入图片描述

C 错误处理

  • errno
  • perror()
  • strerror()
#include <stdio.h>
#include <errno.h>
#include <string.h>
 
extern int errno ;
 
int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

除零

#include <stdio.h>
#include <stdlib.h>
 
main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);//or exit(-1)
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );
 
   exit(EXIT_SUCCESS);// or exit(0)
}

C 递归

C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。

递归是一个简洁的概念,同时也是一种很有用的手段。但是,使用递归是要付出代价的。与直接的语句(如while循环)相比,递归函数会耗费更多的运行时间,并且要占用大量的栈空间。递归函数每次调用自身时,都需要把它的状态存到栈中,以便在它调用完自身后,程序可以返回到它原来的状态。未经精心设计的递归函数总是会带来麻烦。

C 可变参数

在这里插入图片描述

C 内存管理

在这里插入图片描述

C 命令行参数

命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。

argv[0] 存储程序的名称,argv[1] 是一个指向第一个命令行参数的指针,*argv[n] 是最后一个参数。如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2。

#include <stdio.h>

int main( int argc, char *argv[] )  
{
   if( argc == 2 )
   {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 )
   {
      printf("Too many arguments supplied.\n");
   }
   else
   {
      printf("One argument expected.\n");
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要下载runoob菜鸟教程的Python3教程可以按照以下步骤进行操作: 第一步,打开浏览器,进入runoob的官方网站(www.runoob.com)。 第二步,点击网站顶部的菜单栏中的“Python3教程”按钮,进入Python3教程页面。 第三步,浏览Python3教程页面,找到需要下载的教程内容。 第四步,点击想要下载的教程链接,进入该教程的具体页面。 第五步,页面上方会有一个“下载”按钮,点击该按钮。 第六步,弹出下载窗口后,选择保存文件的路径和名称。 第七步,点击保存按钮,开始下载教程内容。 第八步,等待下载完成后,可以在保存的路径中找到下载好的教程文件。 以上就是下载runoob菜鸟教程Python3教程的步骤,按照以上方法进行操作,就可以获得所需的教程资料了。希望能对你有所帮助,并祝学习顺利! ### 回答2: 要下载菜鸟教程的Python 3教程,可以按照以下步骤进行操作。 首先,打开浏览器,并在地址栏中输入网址 "www.runoob.com",打开菜鸟教程的官方网站。 在菜鸟教程的主页上,可以看到导航栏,其中有一个分类为 "编程语言",将鼠标悬停在该分类上,会弹出一个下拉菜单。在下拉菜单中,点击 "Python"。 点击后,会跳转到Python的教程页面。在左侧的导航栏中,可以看到不同的章节和主题。找到所需的教程章节,点击进入。 进入具体的教程页面后,可以按照自己的学习需求,阅读教程内容。在页面的顶部,可以看到一排按钮,其中一个按钮上写着 "下载教程",点击该按钮。 点击后,浏览器会开始下载菜鸟教程的Python 3教程的PDF文件。根据浏览器的设置,可能会出现一个弹窗询问是否保存文件,可以选择保存到自己想要保存的位置,然后点击保存。 待下载完成后,就可以在保存的位置找到已下载的PDF文件,可以使用PDF阅读器打开文件,随时查看学习。 总结:要下载菜鸟教程的Python 3教程,只需通过菜鸟教程官方网站找到对应的教程页面,然后点击下载按钮即可获取教程的PDF文件,方便自己在任何时间和地点学习。 ### 回答3: 要下载runoob菜鸟教程的Python 3教程,首先需要打开runoob的官方网站。在网站的首页上,我们可以找到一个搜索框,输入"Python"并点击搜索按钮。在搜索结果页面上,会显示出与Python相关的教程列表。 找到Python 3的教程并点击进入,会打开一个新的页面,里面包含了详细的Python 3教程内容。我们可以逐个点击不同章节来学习Python的各个方面,例如基础语法、数据类型、流程控制、函数、模块等等。在每个章节的最下方,会有一个下载链接,点击该链接即可下载该章节对应的教程内容。 一旦下载完成,我们可以使用任何支持文本编辑的软件来打开教程内容,比如记事本或者专门的代码编辑器。通过阅读这份教程,我们可以学习到Python 3的基础知识和常用语法,从而能够编写简单的Python程序。 此外,runoob菜鸟教程还提供了在线的Python 3编译器,我们可以在浏览器中直接运行和测试自己编写的Python代码,无需在本地安装Python环境。这样方便快捷地进行学习和实践。 总结来说,要下载runoob菜鸟教程的Python 3教程,只需访问runoob官方网站,搜索并进入Python 3教程页面,点击下载链接获取教程内容,然后使用文本编辑软件阅读学习。同时,也可以利用runoob提供的在线编译器进行自我实践。通过这些方法,我们可以充分利用runoob菜鸟教程的Python 3教程资源,提升自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值