初识C语言(下)

8.函数

C 语言中的函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的参数,也可以不接收。它由两部分组成:函数头和函数体。
**函数头:**包括返回值类型、函数名和形参声明;
**函数体:**复合语句,仅在摸个函数中使用的变量,原则上应在该函数中声明和使用,但要注意不能声明和形参同名的变量,否则会发生变量名冲突的错误。

代码演示

#include <stdio.h>
int main()
{
    
    
    int a = 0;
    int b = 0;
    int c= 0;
    printf("输入两个操作数:");
    scanf("%d %d", &a, &b);
    c = a+b;
    printf("sum = %d\n", c);
    return 0; }
    //缺点:每两个数相加都要重复上述代码.如果需要执行复杂的功能,每次都要重复写很多代码,很麻烦
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y) 
{
    
    
   int z = x+y;
   return z; 
}
int main()
{
    
    
   int a= 0;
   int b = 0;
   int c= 0;
    printf("输入两个操作数:");
    scanf("%d %d", &a, &b);
    c = Add(a, b);
    printf("sum = %d\n", c);
    return 0; 
    }
//函数可以反复使用,每次只需调用Add函数,就可以完成加法。其他复杂的功能也一样,调用函数,就可以达到效果,简化了代码

9.数组

(1)数组定义:
在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按顺序排列的同类数据元素的集合称为数组。
例如

arr[5]={
    
    1,2,3,4,5};
//arr数组大小为5,依次放了1,2,3,4,5

(2)数组下标
在这里插入图片描述
数组下标从0开始,依次递增1

3)数组的使用

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

在这里插入图片描述

10.操作符

在这里插入图片描述
单目操作符

!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof      操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--          前置、后置--
++          前置、后置++
*           间接访问操作符(解引用操作符) 
(类型)       强制类型转换

关系操作符

>
>=
<
<=
!=   用于测试“不相等”
==      用于测试“相等”

逻辑操作符

&&     逻辑与
||     逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号表达式

exp1, exp2, exp3, …expN

下标引用、函数调用和结构体成员

[] () . ->

11.常见关键字

(1)关键字typedef(类型重定义)

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

(2)关键字static
在C语言中:
static是用来修饰变量和函数的
a. 修饰局部变量-称为静态局部变量

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

在这里插入图片描述

b. 修饰全局变量-称为静态全局变量

int g_val = 2018;
int main()
{
    
    
    printf("%d\n", g_val);
    return 0; }

在这里插入图片描述

c**. 修饰函数-称为静态函数**

//代码1
//add.c
int Add(int x, int y) 
{
    
    
    return c+y; }
//test.c
int main()
{
    
    
    printf("%d\n", Add(2, 3));
    return 0
 }


//代码2
//add.c
static int Add(int x, int y) 
{
    
    
    return c+y; }
//test.c
int main()
{
    
    
    printf("%d\n", Add(2, 3));
    return 0; 
 }

代码1正常,代码2在编译的时候会出现连接性错误.
结论
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

12. #define 定义常量和宏

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

在这里插入图片描述

13. 指针

(1)内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地
址。

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
#include <stdio.h>
int main()
{
    
    
 int num = 10;
 &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%p\n", &num);
 return 0;
 }
 //打印地址,%p是以地址的形式打印

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

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>
int main()
{
    
    
 char ch = 'w';
 char* pc = &ch;
 *pc = 'q';
 printf("%c\n", ch);
    return 0; 
 }
 //输出结果为q

(2)指针变量的大小

//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
#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; 
}

14. 结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。

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

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

猜你喜欢

转载自blog.csdn.net/qq_62316056/article/details/124055817
今日推荐