C语言相关

这篇算总结+备忘吧!

缓冲区 :缓冲器为暂时置放输出或输入资料的内存。

一、全局变量和局部变量

  • 局部变量是指在函数内部声明的变量,它的作用域只在此函数中(main()函数也是函数,不要弄错)。
  • 全局变量是在函数外声明的变量,作用域是该文件,可以被本程序中其他函数所共用。
  • 全局变量可不进行初始化,他会自动初始化为0,当局部变量名与全局变量名相同时,在该函数内使用的是局部变量。

二、指针

指针:一个变量的在内存区中的地址称为指针
指针变量:专门用来存放指针的变量,称为指针变量

以上是基本概念,指针就是地址,通过地址可以找到地址对应的值

int *p;  定义指针变量
int a;
int *q = a;  <==>  int *q; q = &a;
(*q)++  <==> a++;
但是 *q++ 不等价于 (*q)++ 而是等价于 *(q++)

两个地址运算符

  • & : 当后跟一个变量名时,&给出该变量的地址。
  • * : 当后跟一个指针名或地址时,*表示给出储存在指针指向地址上的值
2.1 指针和数组

数组a[10],a为数组a的首地址

int a[10],*p=a;
a[i],p[i],*(a+i),*(p+i)表示的值相同

(p+i) == p+i*sizeof(int)

指针与二维数组

 a[i]和*(a+i)无条件等价
 a+i、a[i]、*(a+i)、&a[i][0]均表示第i行首地址;
 &a[i][j]、 a[i]+j、*(a+i)+j都是第i行j列元素的地址;
 a[i][j]、 *(a[i]+j)、*(*(a+i)+j)都是第i行j列元素的值
2.2 指针和结构体

结构体变量的指针:结构体变量所占内存段的起始地址。
指向结构体变量的指针:存放该地址的变量叫做指向结构体变量的指针变量。

struct student{
    int num;
    char name[10];
};
struct  student  stu;
struct  student  *p;
p = &stu;

(*p).num等效于p–>num

结构体变量中成员的引用有三种形式:
(1) 结构体变量.成员名;
(2) (*p).成员名;
(3) p–>成员名;

typedef 是用来定义各种类型名,不能定义变量

2.3 指针和函数

函数的类型是由函数的返回值决定的,所以指针函数就是返回值为指针
函数指针:函数的入口地

扫描二维码关注公众号,回复: 1640950 查看本文章
void *fuctionname(int arg)
void (*fuctionname)(int arg)  //一个已定义的函数在编译时,系统为其分配一个入口地址,并用函数名表示。通过指向函数的指针变量,也可以调用函数.指针变量:   指向函数入口地址的指针变量

三、c语言程序的内存映像

堆和栈都是一种数据结构,栈是一种先进后出的数据表,具体的操作就是压栈(push)和弹栈(pop),堆就是申请空间和释放空间。

  • 堆和栈区别
    • 堆是由程序员申请,也必须由程序员释放。栈是由程序自动分配,自动释放
    • 生存周期堆是由程序员决定的(啥时候申请啥时候释放),而栈是和调用的函数的生存周期决定的
    • 堆和栈的发展方向也不同,如图示

四、动态内存分配的函数

4.1 函数malloc():分配若干字节的内存空间,返回一个指向该内存首地址的指针

函数原型

void *malloc(unsigned int size); //size表示向系统申请的空间大小,函数调用成功返回指向void类型的指针

例如:

int *pi = NULL;
pi = (int *)malloc(3);  //malloc(3)表示申请3byte的内存,将malloc(3)返回值的void * 类型强转为int * 类型
pi = (int *)malloc(sizeof(int));   //若不确定某种类型所占字节数,则使用sizeof()计算
4.2 函数calloc():给若干同一类型的数据项分配连续的存储空间并赋值为0

函数原型

void * calloc(unsigned int num,unsigned int size);

例如:

int *pi = (int *)calloc(3,sizeof(int));
or 
int *pi = (int *)malloc(3 * sizeof(int));
memset(pi,0,3 * sizeof(int));
4.3 函数free():释放向系统申请的存储空间

函数原型

void free(void *p);  
4.4 函数realloc():改变原来分配的存储空间的大小

函数原型

 void *realloc(void *p,unsigned int size);

数组和链表

内存结构
数组名就是指向数组第一个位置的地址

未完,想到了在写!

猜你喜欢

转载自blog.csdn.net/life_hes_az/article/details/80568344