void指针、函数指针、程序内存分布、内存拷贝函数、变量的4存储类型

目录

1.void类型指针

2.函数指针

3.指针的引用

4.程序内存分布

5.内存拷贝函数

 6.变量4种存储类型

6.1.自动变量(auto)

6.2.静态变量(static)

6.3.外部变量(extern)

6.4.寄存器变量(register)

6.5作用域与生存周期


1.void类型指针

void *  空类型指针,只存储地址的值,丢失类型,无法访问,要使用值,必须对这个指针做出正确的类型转换,再间接引用指针

所有其他类型指针都可以隐式自动转为void类型指针,反之需要强制转换

int a = 10;

void *p =&a;  //void 指针不允许加减操作

int * p1 =(int *) p;   //强制转换

2.函数指针

int fun ( int a, int b) {
return a + b;
}

//参数名可以省略,以可以写成 int ( *fp) ( int a ,int b );
int ( *fp) ( int ,int ) ;   //定义一个函数指针fp,可以指向fun( int a , int b)
fp = &fun;

(*fp) ( 10 ,20);    
也可以直接使用fp
fp (10,20);

3.指针的引用

int a = 10 ;
int *p = & a;
int * &q = p;     //指针的引用   *p=*q =a=10

4.程序内存分布

1.栈区(stack):编译器自动分配释放,存放函数参数值,局部变量等。

2.堆区(hean):一般由程序员分配释放,随叫随到,挥之际走。

3.全局/静态区(static):全局变量和静态变量是放一起的 ,在程序编译时分配。

4.文字常量区:存放常量字符串。

5.程序代码区:存放函数体(包括类会成员函数,全局函数)的二进制代码。

5.内存拷贝函数

包含头文件#include<string.h>

void *memcy ( coid * dest , const void * src , size_t n );
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置

 6.变量4种存储类型

所有数据都有两种类型

数据类型:int 、float等

存储类型:自动变量(auto)、静态变量(static)、外部变量(extern)、 寄存器变量(register)

6.1.自动变量(auto)

auto:函数中所有的非静态局部变量

auto int a = 10;  //在C语言中允许,C++中不允许这样书写(不需要写类 型)

6.2.静态变量(static)

static:静态变量(一直存在)

局部静态变量、全局静态变量;

局部静态变量存在与全局,但只在函数内部可以访问到,且只被初始化一次

void fun ( ) {

        static int a = 18 ;   //不管函数调用多少次,初始化语句只会执行一次

        a ++ ;

}

6.3.外部变量(extern)

extern:把全局变量在其他源文件中声明成extern变量,可以扩展该全局便来给你的作用域至声明的那个文件,其本质作用就是全局变量的作用域的扩展

源文件.cpp

int a = 10 ;    //在一个cpp文件中声明一个去全局变量

源文件2.cpp

extern int a ; //在同文件下创另一个cpp文件,并在全局中声明extern int a就可以使用了

6.4.寄存器变量(register)

register:一般经常被使用的变量(如某一变量需要计算几千次)可以设 置成寄存器变量,register百年来给你会被存储在寄存器中,计 算速度快于村子啊内存中的非register变量。

register int j = 10;   //寄存器是没有地址,j无地址

/*  C++的register关键字已经优化,如果我们打印它的地址,如果我们打印它的地址,它就变成普通的auto变量,在C语言中是无法打印出地址  */

寄存器变量不可以定义为全局变量

6.5作用域与生存周期

存储类别

存储器

作用域

声明方式

auto

自动

块内

register

自动

块内,使用关键字register

static(局部)

静态

块内,使用关键字static

static(全局)

静态

文件内部

所有函数外,使用关键字static

extern

静态

文件内部

所有函数外

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值