指针大览

字面量

Int a = 10 中的10 存放在除堆,栈,全局区,之外的位置中,可以当作在代码区中。

存放在堆,栈,全局区的数据都可以取地址(&),可以以此来分辨。

內存塊的數據打包

(Unsigned char ×buf +len )

指针也是一种变量 ,编译器只自动分配4个字节

Int *a

Sizeof(a)= 4

指针存在的最大意义

1. 在同一函数里的指针   p1++ = p2++

2. 指针做函数参数,通过*p指针间接修改实参的值(间接赋值)

void getlength(int *p)

{

*p = 40;

}

int main()

{

int a = 10;

int *p = NULL;

a = 20;

p = &a;

*p = 30;

printf("a:%d \n",a);

getlength(&a);

printf("a:%d \n",a);

system("pause");

return 0;

}

间接赋值三个条件

1. 定义一个变量(实参),定义一个变量(形参)

2. 建立关联(实参取地址传给形参)

3. *p形参,间接去修改实参的值

指针做函数参数(多级指针模型)

函数调用过程中,

用一级指针(通常是形参)去修改0级指针(通常是实参)的值

用2级指针(通常是形参)去修改1级指针(通常是实参)的值

用3级指针(通常是形参)去修改2级指针(通常是实参)的值

用4级指针(通常是形参)去修改3级指针(通常是实参)的值

用n级指针(通常是形参)去修改n-1级指针(通常是实参)的值

函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p来改变实参,把运算结果传出来。

【】 与 *

buf[i ] --->buf[0+i]--->* (p +i)

站在c++编译器的角度,*p相当于我们程序员手工(显示)利用间接赋值,去操作内存

【】怎么理解,只不过是c++编译器帮我们程序员做了一个 * p的操作

主调函数可以将堆区,栈区,全局区的内存地址传给被调函数(主调函数分配内存)

Void abc(int*d,int *c)

{

}

Int main()

{

Int a;

Int b;

Abc(a,s);

Rerturn 0;

}

避免野指针方法

步骤一:

在指针定义的时给指针赋值 NULL

步骤二:

释放指针前判断指针是否是NULL

步骤三:

释放指针后马上给指针赋值NULL

时间: 2024-08-29 12:19:01

指针大览的相关文章

C++智能指针大总结

//最挫的智能指针. #include<iostream> using namespace std; template<typename Type> class my_auto_ptr { public: my_auto_ptr(Type* p = NULL) :ptr(p){} my_auto_ptr(const my_auto_ptr& ma) { ptr = ma.realse(); } my_auto_ptr& operator=(const my_auto

jQuery最基础最全面的选择器大览

一.基本选择器     1.标签选择器 (element):根据给定的标签名匹配元素 eg:$("h2")选取所有h2元素 --- 返回元素集合 2.类选择器 (.class):根据给定的class匹配元素 eg:$(".title")选取所有class为title的元素 --- 返回元素集合 3.ID选择器 (#id) :根据给定的id匹配元素 eg:$("#title")选取id为title的元素 --- 返回单个元素 4.并集选择器 (se

C语言指针与数组易混淆知识点(一)

一指针与数组 二指针与函数 三指针数组数组指针指向指针的指针 四程序陷阱 一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容)是跟操作系统的地址位数有关,比如32位地址的系统,那么指针所占的内存单元就是4个字节,16位就是2个字节,因此,指针的类型只是限定它所指向的变量的类型,其内容所占的单元大小是与操作系统的地址位数相关,与变量类型无关. 在32

浅谈指针的偏移

记得当初学习指针的时候,总是把指针和地址混为一谈,总以为说到指针就是指某个地址而已,后来加强对各类指针的认识以后,才认识到指针不止是简单的地址. 指针是一种类型,通过类型可以声明一个变量并保存一个内存地址,不同类型的指针对保存的地址会有不同的解释,编译器根据指针的类型(对应的偏移量)解引用出相应的数据. 首先在32位程序设计里,指针大小为4bytes,满足2^32 寻址范围. 到底偏移多少: 曾经探究过一个问题,代码如下: int a[4][2] = { 0, 1, 2, 3, 4, 5 ,7,

C 和指针 学习随便

---恢复内容开始--- 对NULL的解引用访问,有可能报错,有可能不会,取决于编译器 指针数组以一个NULL指针结束 ######################################################################### ################################指针大小#################################### 应该说这是一个非常基础的问题,教科书上说指针大小和机器字长相同,即32位机指针长度为4

成员函数指针与高性能的C++委托

成员函数指针与高性能的C++委托(上篇) 撰文:Don Clugston 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托 (delegate)")在一些语言中已经证明了它宝贵的价值.在Delphi (Object Pascal)中,面向对象的函数指针是Borland可视化组建库(VCL,Visual Component Library)的基础.而在目前,C#使"委托&

char数组与char指针

1.以字符串形式出现的,编译器会在结尾自动添加\0,思考,为什么? 存在的C语言方法,如strlen(s),计算字符串的长度,其中s指针.strlen要计算字符串长度,必须知道哪里是结尾,因此使用\0表示结尾.只有字符数组才有\0的概念,其它类型(int)的数组没有这个概念.因为其他类型的数组或者指针,没有strlen这种方法. 那么问题来了,int数组如何计算长度呢?如int a1 = {3,7,9,}; 使用sizeof(a1)/sizeof(int). 2.数组可以在栈上分配,也可以在堆上

指针 与 引用

一.指针 1.指针与指针变量的区分 a.指针:指针就是内存编号,也就是内存地址,通俗的讲,指针就是变量的地址. 注1:指针的大小是根据计算机的操作系统而定的,跟变量类型无关 注2:如果是32位的操作系统,那么在定义一个指针时,指针的大小为4字节,而64位的指针大小为8字节, b.指针变量:指针变量顾名思义,就是可以在地址(指针)中存储的变量. 注1:存储的变量,不是指针地址,因此存储的数据与定义变量的类型有关 注2:指针是一种类型,指针变量是一种变量,就好比 int   和 (int  j 中的

不同平台下int类型、指针类型的数据大小

不同平台下int类型.指针类型的数据大小 对于int类型数据和指针类型数据的大小,是非常基础的问题. 在一个具体的平台上,确定他们最好的办法就是使用sizeof(type)对其进行判断,返回当前数据类型的大小. 在不同的平台下,int类型和指针类型的数据类型大小时怎样的呢?如果要给出一个统一的答案,自然不可能集齐每个平台,一个个地去试,我们必须从底层进行分析. 数据总线和地址总线 计算机内的数据总线是CPU与外设进行数据交换的通路,而地址总线则是CPU用于寻址的通路. 数据总线的位数决定了CPU