C语言数据类型-指针类型和空类型
来源:互联网 发布:植物大战僵尸 for mac 编辑:程序博客网 时间:2024/05/21 06:48
指针类型
指针是什么
C语言的指针类型包括两方面的信息:
一是地址,存放在指针变量中;
二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同
//定义int类型的指针 int* p = &i;
指针为什么要有类型?
Answer:
因为指针存储的是一个内存地址,然而我们只根据一个地址读取对应的数据,但是你不知道什么时候读取完毕,也就导致了数据丢失,所以我们需要指定指针类型,确定什么时候读取完毕 。
例如:char 2字节 16位 int 4字节 32位
指针强制转换
C语言各种类型的指针的概念 传送门
C语言指针强制类型转换 传送门
指针也是一个变量,它自己占据一个4个字节的地址空间(由于程序的寻址空间是2^32次方,即4GB,所以用4个字节表示指针就已经能指向任何程序能够寻址到的空间了,所以指针的大小为4字节),他的值是另一个东西的地址,这个东西可以是普通变量,结构体,还可以是个函数等等。
由于,指针的大小是4字节,所以,我们可以将指针强制转换成int型或者其他类型。同样,我们也可以将任何一个常数转换成int型再赋值给指针。所有的指针所占的空间大小都是4字节,他们只是声明的类型不同,他们的值都是地址指向某个东西,他们对于机器来说没有本质差别,他们之间可以进行强制类型转换。
指针 to 指针 的强制类型转换是指将指针所指的内容的类型由原先的类型转换为后面的类型。
int a = 1;int *p = &a;float *p1 = (float*)p;
则p和p1的值都是&a,但是*p是将&a地址中的值按照int型变量进行解释,而*p1则是将&a地址中的值按照float型变量进行解释。
例子1:指针类型强制转换
int m;int *pm = &m;char *cp = (char *)&m;
pm指向一个整型,cp指向整型数的第一个字节。
例子2
struct str1 a;struct str2 b;a=(struct str1) b; //this is wronga=*((struct str1*)&b); //this is correct
空指针
鉴于指针之间这种灵活的强制类型转换的需求和出于简化代码的考虑,ANSI C引入了空指针即void*。
void指针又名万能指针,在现在的很多程序中,当参数不确定时就用万能指针代替,这一类的指针在线程\进程函数里特别常见。
空类型
一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void,不需要向调用者返回函数值 。
void的语义有多种:
1、作为参数表示无参数
2、作为返回值代表无返回值
3、修饰指针变量代表未知类型的指针
- C语言数据类型-指针类型和空类型
- 14、C语言中的空类型指针
- C语言指针类型
- C语言指针的长度和类型
- c语言基本类型和指针
- C 语言中的数组类型和数组指针类型.
- 数据类型(基本内置类型)——指针和指针孩子(指针变量(指针类型)、数组(构造类型)、字符串、函数指针、空指针等)
- c语言-数据类型-构造类型
- 空指针和void *类型指针
- C语言--多级指针和指针类型强制转换
- C语言的指针类型
- C语言的指针类型
- C语言指针类型转换
- C语言指针类型重要性
- C语言--无类型指针
- C语言基本类型、指针
- 只言片语,C数据类型,函数指针类型
- C语言中的void 和void 指针类型
- A Serial Killer
- Problems & Solutions -- 4
- QEMU和KVM 中断处理过程
- 实现c中memcpy函数
- Activit5.19 explorer部署流程中文乱码
- C语言数据类型-指针类型和空类型
- Android学习笔记——UI基础
- npm的package.json介绍
- 一分钟了解“主成分分析PCA”
- Keras学习(2)-一些概念
- java基础之集合类
- 机器学习(一)
- Shadowsocks Server Setup Mark
- Struts2,Spring,Hibernate框架的优缺点