学C的第四天(各种操作符补充;简单了解多种关键字,define定义常量和宏,结构体)(2)

简介: [被static修饰的变量(静态变量)和全局变量的区别:都存放在静态区中,但静态变量的作用域还是在局部,全局变量的作用域是任意地方,两者生命周期相同,都是程序结束才销毁]2.修饰全局变量 - 称为静态全局变量(未使用static时:)

[被static修饰的变量(静态变量)全局变量的区别:都存放在静态区中,但静态变量的作用域还是在局部,全局变量的作用域是任意地方,两者生命周期相同,都是程序结束才销毁]

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

(未使用static时:)

                                    //add.c文件:
//全局变量具有外部链接属性(可以被extern声明)
//使用在其他源文件内部依然可以使用(方法要正确)
int g_val = 2023;
                                    //test_4_10文件:
//static 修饰全局变量
#include <stdio.h>
//声明外部符号
extern int g_val;
int main()
{
  printf("%d\n",g_val);
  return 0;
}

image.png

(使用static后:)

                                    //add.c文件:
//全局变量具有外部链接属性(可以被extern声明)
//使用在其他源文件内部依然可以使用(方法要正确)
static int g_val = 2023;
//static修饰全局变量,改变了这个全局变量的链接属性,
//由外部链接属性变成了内部链接属性
//内部链接属性:只能在源文件内部使用
//这个静态变量只能在自己所在的源文件内部使用,不能
//在其他源文件外部使用了
                                    //test_4_10文件:
//static 修饰全局变量
#include <stdio.h>
//声明外部符号
extern int g_val;
int main()
{
  printf("%d\n",g_val);
  return 0;
}

image.png

3.修饰函数        -        称为静态函数

(未使用static时:)

                                //add.c文件中:
//static修饰函数和static修饰全局变量是一样的
int Add(int x, int y)
{
  return (x + y);
}
                                //test.c文件中:
//static 修饰函数
#include <stdio.h>
//声明外部符号
extern int Add(int x, int y);
//声明是告诉 函数名 参数名 返回值
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  int s = Add(a, b);
  printf("%d\n", s);
  return 0;
}

image.png

(使用static后:)

                            //add.c文件:
//static修饰函数和static修饰全局变量是一样的
//函数本身时具有外部链接属性的,但是被static修饰,
//就变成了内部链接属性
//使得这个函数只能在自己所在的源文件内部使用,
//不能再其他文件内部使用
static int Add(int x, int y)
{
  return (x + y);
}
                            //test_4_10文件:
//static 修饰函数
#include <stdio.h>
//声明外部符号
extern int Add(int x, int y);
//声明是告诉 函数名 参数名 返回值
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  int s = Add(a, b);
  printf("%d\n", s);
  return 0;
}

image.png

 *register -- 寄存器

51f02348201c48388ed8aa7582d5f438.png

register 仅仅时建议的作用,建议放在寄存器中,但是不是真的放在寄存器中,取决于编译器

11.2--在循环中使用的关键字:

break

continue

do while

for

while

11.3--在循环分支中使用的关键字:

break

switch case

default       --        默认

if else

goto

11.4--有关数据类型的关键字:

char

double

float

int

long

short

void

11.5--修饰类型的关键字:

const        --        设置常属性


signed        --        有符号的


unsigned        --        无符号的


typedef        --        类型重定义


            *typedef  --  顾名思义是类型定义,这里应该理解为类型重命名:

//typedef -- 类型重命名(可以理解成给类型起个别名)
#include <stdio.h>
typedef unsigned int u_int;//将 unsigned int 重命名为 u_int,末尾加;(分号)
int main()
{
  unsigned int num = 0;
  //这里定义num的字符类型有点长,可以用typedef来重命名这个类型
  u_int num2 = 0;
  //运用重命名的字符类型
  return 0;
}


image.png

11.6--函数的返回关键字:

return       --        返回值

11.7--计算计算机变量/类型大小的关键字:

sizeof        --        单位是字节

11.8--void关键字:

void       --        设置函数的返回值

              --        函数的参数

              --        修饰指针

11.9--有关自定义类型的关键字:

enum        --        枚举类型

struct        --        结构体类型

union        --        联合体类型

11.10--volatile关键字(很少见)

12*define定义常量和宏:

define是编译器的预编译指令,是编译器实现的,不是C语言的内容,不是关键字

12.1 -- define定义常量

//#define 定义标识符常量:
#include <stdio.h>
#define M 100 //后面不用加;(分号)
        //这里 M 是一个符号,是个常量,不用分配地址,没有地址
        // 在预处理时进行替换
//变量才需要存储起来,分配地址
int main()
{
  int arr[M] = { 0 };//声明数组长度的值得时常量
  int m = M;//使用符号进行赋值
  printf("%d\n",sizeof(arr));//
  //数组长度为100,有100个元素,一个元素占4个字节
  //      100 * 4 = 400
  printf("%d\n",M);
  printf("%d\n",m);
  return 0;
}

image.png

12.2 -- define定义

//#define 定义宏:
#include <stdio.h>
//使用#define定义一个宏:
#define ADD(x, y) ((x)+(y))
//ADD-->宏的名字  (x, y)-->宏的两个参数 ((x)+(y))-->宏的实现体 
//函数:
int Add(int x, int y)
//int-->函数的返回类型 Add-->函数名 (int x, int y)-->函数参数
{         //
  return x + y; //---->这三行是函数体
}         //
int main()
{
  int a = 10;
  int b = 20;
  //调用宏,类似调用函数
  int c = ADD(a, b);
  //编译时进行替换:int c = ((a)+(b));
  //宏 和 函数:写的形式不一样,调用方式非常类似
  printf("%d\n", c);
  //调用函数
  int d = Add(a, b);
  printf("%d\n", d);
  return 0;
}

78911d1f877946c9a88159ee78734e56.png

13*指针(下次学):

14*结构体(struct):

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

比如描述学生,学生包含:名字+年龄+性别+学号这几项信息,这里只能使用结构体来描述了。

//结构体--学生
#include <stdio.h>
#include <string.h>
struct Stu
{
  //学生的相关属性
  char name[20];//名字-字符串,一个汉字是2个字符
  int age;//年龄
  char sex[5];//“男”、“女”、“保密”
  //最长:“保密”两个汉字4个字符 加一个 “\0”一个字符,最多5个字符
};//大括号{}后加分号
struct Book
{
  char name[50];//书名
  char author[10];//作者
  float price;//价格
  //结构体里定义的内容称为结构体的成员
};
int main()
{
  struct Stu s1 = {"张三", 20, "男"};
//struct Stu整体是一个字符类型,s是一个变量
  struct Book b1 = {"《C语言从入门到入土》", "C大师", 66.6f};
  printf("%s %s %f\n",b1.name ,b1.author ,b1.price);
  //使用 .操作符 来访问 成员对象
  //浮点数在内存中无法精确地保存,会丢失一些精度
  return 0;
}

8da07f30acbb48348ae7ebce6a88db5d.png

相关文章
|
8月前
|
编译器 C语言
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
C语言宏定义(#define定义常量​、#define定义宏​、 带有副作用的宏参数、 宏替换的规则、 宏函数的对比)
|
8月前
|
编译器
关键字static#define 定义常量和宏
关键字static#define 定义常量和宏
51 0
|
8月前
|
存储 程序员 Shell
【C/C++ 基本语法 结构体】C++ 结构体声明(定义)以及不同写法的差异
【C/C++ 基本语法 结构体】C++ 结构体声明(定义)以及不同写法的差异
129 1
|
8月前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出
|
8月前
|
程序员 C语言
在C语言中,typedef是一种用来创建新的数据类型名的关键字
在C语言中,typedef是一种用来创建新的数据类型名的关键字
78 0
|
8月前
#define定义常量和宏
#define定义常量和宏
49 0
|
编译器
#define 定义常量和宏
工作机理:直接替换,以下列代码为例编译器直接将用到max的地方替换为100
77 0
|
存储 编译器 C语言
C语言进阶---自定义类型详解(结构体+枚举+联合)
本章主要介绍了C语言自定义类型详解,比如:结构体,枚举,联合。详细介绍了结构体的大小计算方法。枚举的使用,联合(共用体)的定义的计算大小。以及后面实现通讯录小项目。
C语言进阶---自定义类型详解(结构体+枚举+联合)
|
C语言
学C的第四天(各种操作符补充;简单了解多种关键字,define定义常量和宏,结构体)(1)
10.6:关系操作符: >:大于 >=:大于等于 <:小于 <=:小于等于 !=:用于测试“不相等” ==:用于测试“相等”
|
编译器 C语言
C语言基础知识:变量 (局部和全局)与常量(枚举常量.....)
C语言基础知识:变量 (局部和全局)与常量(枚举常量.....)
85 0