从初识到进阶,硬核解说C语言< 初识篇 2 >

Posted 在下赵某人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从初识到进阶,硬核解说C语言< 初识篇 2 >相关的知识,希望对你有一定的参考价值。

14、函数

函数分为库函数自定义函数
库函数即编辑器自带的一些常用函数,我们在应用了其头文件后便可按照格式来使用对应功能的函数。避免了程序员实现常用函数所做的重复无意义劳动,大大提高了编程效率。
自定义函数即程序员根据自己的需求及不同情况自己实现的函数,给了程序员很大自由发挥的空间同时拔高了编程的难度,也是最体现程序员水平的地方

#include <stdio.h>
int main()
{
  int num1 = 0;
 int num2 = 0;
  int sum = 0;
  printf("输入两个操作数:>");
  scanf("%d %d", &a, &b);
  sum = num1 + num2;
  printf("sum = %d\\n", sum);
  return 0;
}

上述代码,写成函数如下:

#include <stdio.h>
//函数实现
int Add(int x, int y) 
{
 int z = x+y;
 return z;
}
//程序主体
int main()
{
  int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
  int num1 = 0;
  int num2 = 0;
  int sum = 0;
  printf("输入两个操作数:>");
  scanf("%d %d", &num1, &num2);
  //函数调用
  sum = Add(num1, num2);
  printf("sum = %d\\n", sum);
  return 0;
}

在这里插入图片描述

函数的特点就是简化代码代码复用

15、数组

数组的定义:一组相同类型元素的集合
eg:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

在这里插入图片描述
访问arr中的所有元素方法:

#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
   printf("%d ", arr[i]);
}
printf("\\n");
  return 0;
}

16、操作符的简单介绍

  1. 算术操作符 : 加(+)减(-)乘(*) 除(/)取模(%)
    在这里插入图片描述

  2. 移位操作符 : >> <<

附:移的实际是二进制位
在这里插入图片描述

  1. 位操作符 : &(按位与) |(按位或) ^(按位异或)
    在这里插入图片描述

附:位操作符操作对象是二进制位

  1. 赋值操作符: 等于( = )
    在这里插入图片描述

  2. 复合赋值操作符: 加等于( += ) 减等于( -= ) 乘等于( *= ) 除等于( /= ) 按位与等于(&=) 按位异或等于( ^= ) 按位或等与( |= ) 右移等于( >>= ) 左移等于( <<= )
    在这里插入图片描述

  3. 单目操作符(只有一个操作数的操作符)

! 逻辑反操作——(真变假,假变真
附:C语言中假为0,真为非零
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位

sizeof (char)      // 1
sizeof (int)       // 4
sizeof (short int) // 2
sizeof (long int)  // 4
sizeof (float)     // 4
sizeof (double)    // 8
//若有:                       
int arr[20];                      
//则arr大小:                 
sizeof(arr);     // 80

在这里插入图片描述

~ 对一个数的二进制按位取反(一个数对应的二进制数每位 0变成1 , 1变成0
– 前置、后置–
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

  1. 关系操作符
    > (大于)
    >= (大于等于)
    < (小于)
    <= (小于等于)
    != (用于测试“不相等”)
    == (用于测试“相等”)

  2. 逻辑操作符

&& 逻辑与
|| 逻辑或
在这里插入图片描述

  1. 条件操作符

    exp1 ? exp2 : exp3
    附:
    exp1 成立 ,则exp2被执行,且exp2的结果是整个表达式结果
    exp1 不成立 ,则exp3被执行,且exp3的结果是整个表达式结果

  2. 逗号表达式
    exp1, exp2, exp3, …expN
    附:exp1, exp2, exp3, …等依次执行,但整个逗号表达式结果为最后一个 expN 的结果。

  3. 下标引用、函数调用和结构成员
    下标引用操作符
    [ ]
    附:在数组中用,eg: arr [ 2 ]
    函数调用操作符
    ()
    附:以后解释
    结构体成员
    .
    ->
    附:以后再解释

  4. 常见关键字
    附:关键字,大部分前面文章简单介绍了,其余后面会遇到,以后讲解。
    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
    规定:变量名不能和关键字同名冲突。

  5. typedef
    typedef 顾名思义是类型定义,这里应该理解为类型重命名
    eg:
    将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. 关键字static
    在C语言中:static是用来修饰变量和函数的
    1.修饰局部变量-静态局部变量
    (局部变量的生命周期变长)—static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,
    附: 局部变量在执行时,进入创建,出来销毁。 但是加上static后,出来不会销毁。
    生命周期才结束。
    2.修饰全局变量-静态全局变量
    (改变了变量的作用域)— 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,
    不能在其他源文件内使用。
    3.修饰函数-静态函数
    (改变了函数的作用域 , (连接性) )— 一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
    在这里插入图片描述

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

在这里插入图片描述

18、指针

指针与内存息息相关,内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址. 而这些内存单元的地址编号就被称为指针
在这里插入图片描述
变量都有地址,如何取出变量地址?这里就需要用到取地址符号 &

在这里插入图片描述
取出变量地址后,地址存储就需要定义指针变量

指针变量:一种用来存放地址的变量
在这里插入图片描述
定义好了指针变量,储存好了变量地址(内存单元的地址编号),如何使用呢?这里就需要用到 解引用操作符*
指针的使用实例:

#include <stdio.h>
int main()
{
int num = 10;
int *p = &num;
*p = 20;//找到P中存放的地址所对应的变量,并将其赋值为20
  return 0;
}

在这里插入图片描述
指针变量的大小

#include <stdio.h>
int main()
{
  printf("%d\\n", sizeof(char *));
  printf("%d\\n", sizeof(short *));
  printf("%d\\n", sizeof(int *));
  printf("%d\\n", sizeof(double *));
  return 0;
}

32位64位平台分别运行,得结果分别为48
结论:指针大小在32位平台是4个字节,64位平台是8个字节。

19、结构体

生活中许多事物,像 “人”、“书” 等,都是复杂对象,不是简简单单用一个或几个字符或数字能表达的,而结构体使得C语言有能力描述复杂类型。
eg: 描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。
这里用结构体来描述:
1.先创建一个类型代来表学生,名字就叫struct stu

struct Stu
{
  char name[20];//名字
  int age;    //年龄
  char sex[5];  //性别
  char id[15]//学号
};

在这里插入图片描述

2.结构体的初始化:

struct Stu s = {"张三"20"男""20180101"};

在这里插入图片描述

3.应用 (打印) 结构体信息

//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
0printf("name = %s age = %d sex = %s id = %s\\n", ps->name, ps->age, ps->sex, ps->id);

在这里插入图片描述
最后,如果这篇文章帮到您了,可以点下赞吗~~~
拜托了,这对我真的很重要!!!
(初识篇结束,到这里,大家应该已经对C语言有了最基本的认识,即将开始初阶篇)

以上是关于从初识到进阶,硬核解说C语言< 初识篇 2 >的主要内容,如果未能解决你的问题,请参考以下文章

从初识到进阶,硬核解说C语言< 基础篇 1 >分支语句&循环语句

C语言精华 - 指针初识篇

C语言从入门到入土(入门篇P3)

C语言 - 结构体初识

初识C语言之二

初识C语言之二