指针 文章 - 草稿

1.操作申请的堆内存必须使用

2.值传递是按值传递,修改被传递的对象必须通过对象的指针来完成

3.数据总线:数据信息传送,位数与电脑int值相等

地址总线:位数决定了CPU可以直接追寻

32位232KB,4G

地址总线(指针)=数据总线(int整型)
8个位,一个字节来访问,小于一个字节的用位操作
数组:int double char

指针:int数据类型,double数据类型,char数据类型

int保存整型,char存储字符

任何程序数据载入内存后,在内存中有地址=指针//只看最后一个*号,前面的只不过是type类型

为了保存一个数据在内存中的地址=指针变量

指针理解为int整型,只不过它存放的变量为内存地址而不是普通数据

P即第P个字节,但不能进行加减乘除

指针指向数据的存放位置

TYPE *P  P是指向TYPE的指针

指针类型长度为4

占用字节数大于1,则其变量的地址就是地址值最小的字节的地址

从低地址到高地址

栈区,堆区,静态数据区,方法区

不同区域区有不同的生命周期:num是main函数中的局部变量,因此当main函数被启动时,被分配在栈内存上,当main执行结束时,消亡

内存在逻辑上会被划分为:栈区,堆区,静态数据区,方法区

TYPE *P

P++

不是+1,而是加sizeof(Type)

指针变量:用来保存指针的变量就是指针变量

也是一种变量,指针变量也符合前面变量和内存主题中的特性(类型和值)

指针的类型:决定了这个指针指向的内存的字节数并如何解释这些信息,不同类型的指针对相同指针的值解析不同(字节数不同)得到不同的数据

指针的值:地址为…指针的值就为…

指针变量也是一种程序数据,也有自己的指针,形成制针的指针

在变量名前写一个*来变成对应类型的指针变量,必要时加()来避免优先级的问题
int a//int类型变量a

int *a//int*变量a

int arr[3]  包含3个int元素的数组

int (*arr)[3]  //指向包含3个Int元素的数组的指针变量(对应变量类型的指针变量
int*p_int  指向int类型变量的指针

double*p_double 指向idouble 类型变量的指针

struct Student *p_struct  //结构体类型的指针

int(*p_func)(int,int)指向返回类型为int,有两个int形参的函数的指针

int**p_pointer //指向整型变量指针的指针

&取得一个变量的值
特俗情况不取地址:

1.数组名的值就是这个数组的第一个元素的地址
2.函数名的值就是这个函数的地址
3.字符串字面值常量作为右值时,就是这个字符串对应的字符数组的名称,也就是这个 字符串在内存中的地址

p=p+1的意思是让p指向原来指向的内存块的下一个相邻的相同类型的内存块

指针变量用来解地址,读数据

浅拷贝:

int*p1=& num;

int*p3=p1;

(p1.p3共享数据num)

空指针(Null)

任何程序数据都不能存储在地址为0的内存块中,它是被操作系统预留的内存块

Null指针用于表示特定的指针目前并未指向任何东西。一个用于在某个数值的函数可能返回一个(指向查找到的数组元素的指针),如果没找到,则返回一个Null指针。

内存的动态分布:Null用来避免内存被多次释放,造成经常性的段错误,在free或者delete内存分配的动态后,都应该立即把指针置空,避免出现

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容