小白初识c语言(超友好)!!!(二)

简介: 小白初识c语言(超友好)!!!(二)

字符串+转义字符+注释

1.字符串

(定义太复杂了,我用自己理解解释)

就是相当于一段话,“”引号里面就是说话内容,引号里面是键盘上的所有字符组成的,当然也可以是中文

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

下面是字符串的定义与输出,字符串一般是用字符数组定义,因为字符串是多个字符组合起来的,输出是**%s**

#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
  char arr1[] = "bit";
  char arr2[] = { 'b', 'i', 't' };
  char arr3[] = { 'b', 'i', 't','\0' };
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  printf("%s\n", arr3);
  return 0;
}

从这一段代码的运行结果就能看出来第二个没有加‘\0’输出了一堆乱码,那是因为不到结束标志就一直输出了后面计算机存储的内容,第一种定义不需要加‘\0’自动带有。

2.转义字符

转义字符               释义
\?                    在书写连续多个问号时使用,防止他们被解析成三字母词
\'                    用于表示字符常量'
\“                    用于表示一个字符串内部的双引号
\\                    用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a                    警告字符,蜂鸣
b                     退格符
\f                    进纸符
\n                    换行
\r                    回车
\t                    水平制表符
\v                    垂直制表符
\ddd                  d d d表示1~3个八进制的数字。 如: \130 表示字符X
\xdd d d              表示2个十六进制数字。 如: \x30 表示字符0

注:

\ddd: ddd表示1-3个八进制的数字。将ddd三个数字转换成十进制,十进制数对应的ASCAII就是结果。

dd表示2个十六进制的数字。将dd转换成十进制,十进制数对应的ASCAII就是结果。

(如果看不懂官方解释,通俗就是数字代替字符)


思考题

这里给大家留一个思考题,在文章最后我会开启一个投票,如果你能坚持到那就泰裤辣!!!!

这就是选择!
//程序输出什么?
#include <stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));
// \62被解析成一个转义字符
printf("%d\n", strlen("c:\test\628\test.c"));
return 0;
}

注释

(相当于生活中用到的便利贴)

  1. 1.单行注释 //xxxxxx
    2.多行注释内容 /xxxxxx/

选择语句

C语言有选择结构和循环结构我们先介绍选择结构

选择结构就是我们常说的因果;


接下来我们用代码实现这张图

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int main() {
  char ch[] = "";
  scanf("%s", ch);
  if (strcmp(ch, "好好学习") == 0) {
    printf("好offer");
  }
  else if (strcmp(ch ,"不好好学习")==0) {
    printf("烤地瓜");
  }
  return 0;
}

循环语句

就是持续做一件事然后有一个限制条件,不满足限制条件就跳出循环

依旧是代码实现循环

经典九九乘法表

int main() {
  //在屏幕上输出9 * 9乘法口诀表
  for (int i = 1; i < 10; i++) {
    for (int j = 1; j <= i; j++) {
      int sum = i * j;
      printf("%d*%d=%d ", i, j, sum);
    }
    printf("\n");
  }
  return 0;
}

函数

函数基本结构

#define _CRT_SECURE_NO_WARNINGS 1

#include ;

返回值 方法名(形参){

函数所要实现的作用

return 返回值(和上面返回值类型一样);

}

int main() {

方法名(实参);

return 0;

}

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>;
int Max(int a, int  b) {
  int sum = a > b ? a : b;
  return sum;
}//函数体
int main() {
  int a = 0;;
  int b = 0;
  scanf_s("%d %d", &a, &b);
  printf("%d",Max(a,b));
  return 0;
}

函数特点:提高代码复用率,清晰明了;

数组

1、一维数组,声明时数组名称前面的类型是数组元素的类型。

2、二维数组,可以作为种表格,它有行有列。

3、字符数组,c语言中没有字符串的概念只有单个字符,所以称一串字符串为字符数组。

数组初始化

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
    //一维数组
  int arr[] = { 1,2,3,4 };
  //字符数组
  char ch[] = { '1','2','3','4'};
  //二维数组
  int arr1[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
  printf("一维数组");
  for (int i = 0; i < 4; i++) {
    printf("%d ", arr[i]);
  }
  printf("\n");
  printf("字符数组");
  for (int i = 0; i < 4; i++) {
    printf("%d ", arr[i]);
  }printf("\n");
  printf("二维数组\n");
  for (int i = 0; i < 3; i++) {
    for (int n = 0; n < 3; n++) {
      printf("%d ", arr1[i][n]);
    }
    printf("\n");
  }
}

2.数组下标

C语言规定:数组的每个元素都有一个下标,下标是从0开始的。

数组可以通过下标来访问的。

int arr[10] = {0};

//如果数组10个元素,下标的范围是0-9

操作符

1.算数操作符

“+‘’ , “ -”, “ * ", “%d”


除了‘%’,其他操作符均可以作用于整数与浮点数。

‘/’如果两边的操作数均为整数,则结果为整数,有浮点数操作数则结果为浮点数。

‘%’两边的操作数均要为整数

2.移位操作符

“>>”,“<<”


左移操作

右移操作

3.位操作符

& ^ |

位移操作符只能作用于整数

4.赋值操作符

= ,+=, -=, *=, /=, &=, ^=, |=, >>=, <<=

5.单目操作符(操作一个值)

int a=0;

//!a=0,就是相反操作,1为真!1就是假

  • —和+

就是数学里面的对数字进行加减运算的操作符

  • &

取地址就是得到储存在内存中的地址

  • sizeof
int main()
{
  int a = 0;
  short b = 2;
  printf("%d\n", sizeof(b = a + 2));
  printf("%d", b);
  return 0;
}
  • ~

将一个整数的二进制位进行取反,不区分符号位统统进行取反处理

  • ‘++’与‘- -’

就是自增1,自减1,多用在循环里面

#include <stdio.h>
int main() {
  for (int i = 0; i < 100; i++) {
    printf("%d ", i);
  }
  printf("\n");
  for (int i = 100; i > 0; i--) {
    printf("%d ", i);
  }
  return 0;
}

最后一个我们最后指针在细讲;

6.关系操作符

7.逻辑操作符

8.条件操作符(三目操作,操作三个值)

意思是exp1为真执行exp1,为假则执行exp3

9.逗号表达式

exp1,exp2,exp3…expN

10.下标引用,函数调用,结构成员

关键字

auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while

(这里我先介绍几个常见的,博主以后会细讲)

typedef

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}

static

在C语言中:

static是用来修饰变量和函数的

  1. 1.修饰局部变量-称为静态局部变量
  2. 2.修饰全局变量-称为静态全局变量
  3. 3.修饰函数-称为静态函数

修饰局部变量(局部变量储存在静态区,直到程序结束,才还给操作系统)

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}
//代码1
#include <stdio.h>
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();
}
return 0;
}
//代码2
#include <stdio.h>
void test()
{
//static修饰局部变量
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i<10; i++)
{
test();
}
return 0;
}

对比代码1和代码2的效果理解static修饰局部变量的意义。

结论:

static修饰局部变量改变了变量的生命周期

让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

static修饰全局变量

//代码1
//add.c
int g_val = 2018;
//test.c
int main()
{
printf("%d\n", g_val);
return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
printf("%d\n", g_val);
return 0;
}

代码1正常,代码2在编译的时候会出现连接性错误。

结论:

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使

用。

static修饰函数

与static修饰全局变量一样,只能在本文件使用,不能在其他源文件使用

#define定义常量和宏

/define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10*ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}

指针

内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地

址。


简单来说指针就是定义内存中地址的值


//取出变量地址如下:
#include <stdio.h>
int main()
{
int num = 10;
&num;//取出num的地址
//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf("%p\n", &num);//打印地址,%p是以地址的形式打印
return 0;
}

如何创建一个指针变量

那地址如何存储,需要定义指针变量。
int num = 10;
int *p;//p为一个整形指针变量
p = &num;

指针使用实例

#include <stdio.h>
int main()
{
int num = 10;
int *p = &num;
*p = 20;
return 0;
}

指针大小

#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。

这里只能使用结构体来描述了。

例如:

结构体初始化

//结构体的初始化:
struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};

结构体应用

struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

结尾

大家觉得有什么写的不妥或者不对的地方可以评论区留言,希望大家能够给博主一个三连,感谢!!!

我将会持续更新C语言进阶文章,希望大家能够多多支持

思考题投票区

文章知识点与官方知识档案匹配,可进一步学习相关知识

C技能树首页概览   159825 人正在系统学习中

image.png



目录
相关文章
|
Java 编译器 C语言
小白初识c语言(超友好)!!!(一)
小白初识c语言(超友好)!!!(一)
141 2
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
39 3
|
18天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
39 10
|
18天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
41 9
|
18天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
31 8
|
18天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
40 6
|
18天前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
103 6
|
18天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
48 6
|
18天前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
27 5
|
29天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
51 4