C语言第四课--------要我们一起快乐的学习吧2

简介: C语言第四课--------要我们一起快乐的学习吧

static修饰函数

可以看出函数也是有外部链接属性,可以跨文件使用

当我们利用static修饰函数时

可以看出其实被static修饰的函数会把函数的外部链接属性变成内部链接属性(就是全局变量不能跨文件使用,只能在自己的.c文件使用)

#define 定义常量和宏

我们前面回顾一下常量的定义

字面常量

#define定义常量

const修饰常变量

枚举常量(enum)

#include <stdio.h>
//定义标识符常量
#define M 100
#define CH 'g'
//
int main()
{
  printf("M=%d\n", M);
  printf("CH=%c\n", CH);
  return 0;
}

#define定义宏

宏可以有参数也可以无参数,宏是替换的

代码:

#include <stdio.h>
//宏
#define ADD(x, y) (x+y)
//函数
int Add(int x, int y)
{
  return x + y;
}
int main()
{
  int a = 12;
  int b = 13;
  int c = ADD(a, b);
  printf("c=%d", c);
  return 0;
}

结果

指针

内存空间为了有效的进行管理:

1.把内存划分为一个个有效的内存单元(比如1个字节)

2.给每个内存单元编号==地址==指针

地址怎么来呢

图中是32位机器,就有32根地址线,一根地址线产生1个bit位,共有2^32个地址,一个地址有32位bit

注意指针大小和内存单位大小是两个不同的概念,指针大小是指针大小,内存单位大小是内存单位大小

我们还可以参考内存

代码:

#include <stdio.h>
int main()
{
  int a = 10;
  return 0;
}

a2c3e6588262479790360f255737c307.png318af59bd3b54d1487c87edd1383e088.png 如果是多个内存储存一个变量,只会显示第一个内存的指针,因为我们可以通过运算算出其他指针

指针变量

代码:

#include <stdio.h>
int main()
{
  int a = 10;
  //指针变量
  int* p = &a;//0x007AFBA8---内存的编号==地址==指针
  //*说明p为指针变量  
  //int 是说明p指向的是int 类型的变量
    *p;//*解引用操作符 ,通过地址找到所指向的对象,即a   *pa==a
  printf("%d", *p);
  return 0;
}

*说明p为指针变量

int 是说明p指向的是int 类型的变量

我们创建的指针变量是放入的是一个指针(内存的编号),不是内存

指针总结:

1.内存会划分以字节为单位的内存单元

2.每个内存单元都有编号,编号==指针==地址

3.c语言中创建的变量,是向内存申请一块空间,比如int a = 12,就是向内存申请一块4个字节的内存空间,这个空间有编号

4.这个地址要存储起来创建一个指针变量,如 int* p = &a

5.p存放的是a申请空间的编号,即指针,所以叫指针变量(用于存储编号的)

6. *p通过p存放的编号找到a

注意一下:

存入指针变量的任何东西都当作指针处理

指针变量的大小

代码:

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

结果:

可以看出指针变量空间大小为4,

其实一个指针变量的空间大小是由地址线的条数决定的,一根地址线产生一个bit ,

结构体(复杂的对象)

比如 一个人:名字,身份证........

代码:

#include <stdio.h>
struct Stu
{
  char name[20];
  int age;
  int score;
};
int main()
{
  int num = 0;
  struct Stu name1 = { "张三", 18, 88};
  struct Stu name2 = { "张以", 15, 85};
  struct Stu name3 = { "张地方", 10, 86};
  struct Stu* ps = &name1;
  printf("%s %d %d\n", name1.name, name1.age, name1.score);
  printf("%s %d %d\n", name2.name, name2.age, name2.score);
  printf("%s %d %d\n", name3.name, name3.age, name3.score);
  printf("%s %d %d\n", ps->name, ps->age, ps->score);
  printf("%s %d %d\n", (*ps).name, (*ps).age, (*ps).score);
  return 0;
}

结果:

结构体变量.结构体成员

结构体地址->结构体成员

(*结构体地址).结构体成员

总结

以上就是我所分享的内容,有不理解的小可爱可以来私聊我,这初识C语言就到此结束了,下面我会慢慢的一点点解释

相关文章
|
3月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
21 0
|
5月前
|
编译器 C语言
C语言函数的学习
掌握函数的使用是学习C语言的关键一环,理解和应用这些基本的函数概念将使你能够更有效地利用C语言的强大功能。
28 0
|
7月前
|
存储 程序员 Go
|
7月前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
88 1
|
7月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
54 1
|
7月前
|
C语言
|
7月前
|
C语言
|
7月前
|
C语言
|
7月前
|
C语言
|
7月前
|
C语言