C语言入门篇(二)下

简介: C语言入门篇(二)

12. 常见关键字


用户不能自己创造关键字


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


12.1 关键字typedef

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


typedef struct Node
{
  int data;
  struct Node* next;
}Node;     //把struct Node叫做Node

12.2 关键字static

在C语言中: static是用来修饰变量和函数的

    1.修饰局部变量称为静态局部变量

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

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


1.修饰局部变量–静态局部变量


void teat()
{
  int a=5;
  a++;
  printf("%d",a); 
}
int i=0;
while(i<10)
{
  test();
  i++;
}
return 0;
 //6 6 6 6 6 6 6 6 6 6 
//如果在 int 前加上static  则输出为 6 7 8 9 10 11 12 13 14 15

static修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束。


2.修饰全局变量–动态全局变量

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


全局变量具有外部链接属性,使用extern可以在其他源文件内部使用

static修饰全局变量,改变了这个全局变量的链接属性,由外边链接属性变为内部链接属性,导致不能跨文件使用。


3.修饰函数–静态函数(和static修饰全局变量是一样的)


//代码1 
//add.c
static int Add(int x,int y)            
{                                               
  return x+y;                                    
}   
//teat.c 
int main()
{
  printf("%d",Add(1,2))//3 
  return 0;
}
//代码2 
//add.c
static int Add(int x,int y)            
{                                               
  return x+y;                                    
}                                           
//teat.c
int main()
 {
  printf("%d",Add(1,2))//出现链接行错误
  return 0;
}   

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。


13. #define定义常量和宏


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


14. 指针


什么是指针?


指针也就是内存地址,指针变量是用来存放内存地址的变量


指针相对于一个内存单元来说,指的是单元的地址,该单元的内容里面存放的是数据。在 C 语言中,允许用指针变量来存放指针,因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。


14.1 内存

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

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

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

      aeb09a265b49409ce2e329715e682366_387ab611070246e6a02837ce9fa09f7c.png

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

取出变量地址如下:

099e950add017042e3036171f9fde773_6680ea45aeeb466387be8b538e0fb772.png

变量num在内存中的存放地址:

 a734971e4da74f857585e6354756776a_bfd490eb88a44f7596b525ab3a34c93d.png

地址又是如何存储的呢? 需要定义一个指针变量


int num = 10;
int* p=&num;//p存放num的地址,是一个整型指针变量,即是存放地址的变量
*p = 20;//解引用操作符,*p就是num

指针的使用实例:


int main()
{
  int num = 10;
  printf("%p\n", &num);
  int* p=&num;//p存放num的地址,是一个整型指针变量,即是存放地址的变量
  *p = 20;//解引用操作符,*p就是num
  printf("%d\n", p);
  return 0;
}

6fe6775cd124b976fac94d0523900b85_415077bc777d49a8936ad03f7527e013.png


14.2 指针变量的大小

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


15. 结构体


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

比如描述学生,学生包含:名字+学号+分数这几项信息。

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


struct Stu
{
  char name[20];//名字
  int num;//学号
  float score;//分数
};
//打印结构体信息
struct Stu s={"wanger",101,96};
//.为结构体成员访问操作符
printf("name=%s num=%d score=%lf\n",s.name,s.num,s.score);
//->访问操作符
struct Stu *p=&s;//定义指针变量p类型
printf("name=%s num=%d score=%lf\n",p->name,p->num,p->score);
printf("name=%s num=%d score=%lf\n",(*p).name,(*p).num,(*p).score);

使用实例:

c8601670124adaaf9f6417d6af1d63ff_41ebb83b04374532837ce5b30d41ff17.png


结束语


到这里初始C语言的内容就结束了,后面我将会对这些知识点进行拓展延伸,详细讲解。

 山一程,水一程,感谢铁汁的关注~

 我们下一篇文章再见。


相关文章
|
2月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
68 2
|
18天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
71 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
2月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
35 1
|
2月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
4月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
5月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
71 4
【C语言入门】初识C语言:掌握编程的基石
|
4月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
66 1
|
5月前
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
119 2
|
5月前
|
前端开发 C语言 C++
C语言入门02---环境搭建
C语言入门02---环境搭建
|
6月前
|
存储 Web App开发 算法
c语言的简单入门
熟悉c语言(简单入门)