c语言出识

这篇博客主要介绍了C语言的基础知识点,包括typedef、static关键字的使用,预处理器#define的讲解,以及指针和结构体的概念。在typedef中,学习如何创建新的数据类型别名;在static部分,探讨了它如何影响局部变量和函数的作用域,分析了静态变量与非静态变量的区别;同时,也提到了预处理器#define在代码中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

<1>.关键字typedef

<2>.关键字static

<3>.#define

<4>.指针

<5>.结构体

1.typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名
简单地说就是将数据类型名称改成自己想用的名字
代码:
#include<stdio.h>
typedef unsigned int u_int   / / unsigned int 重命名为 u_int, 所以 u_int 也是一个类型名
int main()
{
//unsigned int 无符号整型
unsigned int num=100;
u_int  num1=200;
return 0;
}

2.static

static----静态变量

static的3个作用:
1. 修饰局部变量 - 称为静态局部变量
2. 修饰全局变量 - 称为静态全局变量
3. 修饰函数 - 称为静态函数

<1>..修饰局部变量

代码1:

#include<stdio.h>

void test()

{

int a=1;//a为局部变量

a++;

printf("%d",a);

}

int main()

{

int i=0;

while(i<10)

{

test();

i++;

}

return 0;

}

运行结果:

 

结果分析:
连续输出了10个2          原因:局部变量经过一个生命周期后会被销毁,等到进入下一个生命周期时,会重新开辟一个内存来存放局部变量,上一生命周期局部变量的值没有保存
代码2:
// void 在这里表示不需要函数返回任何值
void test()
{
 //a本来是局部变量的
 //使用static修饰局部变量
static int a = 1;
 a++;
printf("%d ", a);
}
int main()
{
 int i = 0;
while (i < 10)
 {
 test();
 i++;
}
return 0;
}
运行结果:

 

 

 

<2>. 修饰全局变量
如果想使用来自其他文件(外部文件)的 全局变量,先要声明一下
extern是一个关键字,是专门用来声明外部符号的

 

 

全局变量前面加了static后

 分析:

 

<3>.修饰函数

没用static修饰前

 分析:

 加了static后

 

3. #define 定义常量和宏
<1> #define 定义标识符常量
#include<stdio.h>
#define M 100
#define STR "hehe"
int main()
{
 printf("%d\n", M);
 printf("%s\n", STR);
 return 0;
}
<2> #define 定义宏
#include<stdio.h>
#define ADD(x,y)    ((x)+(y))  //宏的定义
int main()
{
int a=10;
int b=20;
i nt sum=ADD(a,b);
printf("%d",sum);
return 0;
}

 

4. 指针
说到指针就必须提到内存
<1>内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1 个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地
<2> 变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
如何取出变量的地址
#include<stdio.h>
int main()
{
int a = 10;
&a; //取出a的地址
//注:这里a4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf("%p",&a); // 打印地址, %p 是以地址的形式打印
return 0;
}

 

那地址如何存储,需要定义指针变量。
int num = 10 ;
int * = & num ; ; //p 为一个整形指针变量  指针变量用来存储地址
指针的使用实例:
#include <stdio.h>
//& - 取地址操作符
//* - 解引用操作符/间接访问操作符
int main ()
{
int num = 10 ;
int * p = & num ; //p是用来存放地址的,所以我们把p称为指针变量
* p = 20 ; //*的解引用操作符,*p的意思就是通过p中的值,找到p所指向的对象,也就是说*p就是num
    return 0 ;
}
<3> 指针变量的大小
指针大小在 32 位平台是 4 个字节,
64 位平台是 8 个字节。
#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 ;
}
在32平太上

 

在64平台

 

5. 结构体
结构体是 C 语言中特别重要的知识点,结构体使得 C 语言有能力描述复杂类型。
比如描述学生,学生包含: 名字 + 年龄 + 性别 + 学号 这几项信息。
这里只能使用结构体来描述了
<1>介绍两个操作符
.
结构体成员访问的操作符
用法:结构体变量.结构体成员
->
结构体成员访问的操作符
用法:结构体指针->结构体成员
//结构体类型的定义
struct Stu
{
 //结构体的成员
 char name[20];
 int age;
 char sex[10];
} ;
#include <string.h>
int main()
{
//创建结构体变量,并且初始化
 struct Stu zhangsan = {"张三", 30, "男"};
 struct Stu lisi = {"李四", 24, "保密"};
//打印结构体的数据
printf("%s %d %s\n", zhangsan.name, zhangsan.age, zhangsan.sex);
printf("%s %d %s\n", lisi.name, lisi.age, lisi.sex);
 //->这个操作符
struct Stu * pl = &lisi;
 printf("%s %d %s\n", (*pl).name, (*pl).age, (*pl).sex);
 printf("%s %d %s\n", pl->name, pl->age, pl->sex);
return 0;
}

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值