指针知识点总结1

C语言指针:

首先,CPU从内存中读取数据和指令,然后在返回内存中;

计算机能够识别,存储,运算的时候都是使用的二进制的形式;

总结:

1,内存会被划分为一个个的内存单元,每个内存单元的大小是一个字节

2,每个内存单元都会给一个编号 == 地址 == C语言中也让叫  指针;

指针变量类型的意义:

变量创建的本质就是在内存中开辟一块空间;

            

图片中的int 就是整型 是4个字节,右边就是在内存中为 a 开辟的空间是4个字节,每个字节都是有地址的,用来存储25;

&a --- 取出a的地址  &  ---- 取地址符号  

&a 取出的是a的4个字节中第一个字节的地址(较小的地址)

pa是指针变量,是需要向内存申请空间的,这样才能存放地址;

指针变量需要多大的空间,取决于存放的是什么?存放的是地址;

地址存放需要多大的空间,指针变量的大小就是多大;

1,指针其实就是地址,       2,指针变量就是存放指针(地址)的

口头语中的说的指针一般都是说的指针变量

64位机器上:地址是64个0/1的二进制序列,存储起来需要64个bit位,也就是8个字节, 指针变量大小就是8个字节.

32位机器上:地址是32个0/1的二进制序列,存储起来需要32个bit位,也就是4个字节, 指针变量大小就是4个字节.

int* 指针解引用访问的是4个字节;

char* 指针解引用访问的是1个字节;

结论:

指针类型决定了指针进行解引用操作的时候能访问多大的空间.

说明:指针类型决定了指针的步长,就是向前或向后走一步多大的距离;

type* (p+i);           p+i 就是跳过i 个type类型的数据,相当于跳过了i * sizeof(type)个字节;

const 修饰指针     

const 与 * 的位置关系      以及*const和const*的用法;
C语言程序中的const用来修饰指针;
例:int a = 10中的a 可被修改;但是const int a = 10中的a不能被修改;但是a的本质还是一个常变量;const在c++中就是常量;
例:const int* p =&a;
const在*左边时:限制的是*p,意思是不能通过p来改变p指向的对象的内容,但是p本身是可以改变的,p可以指向其他对象;      如: int m = 0;  p = &m;
例:int* const p =&a;
const在*右边时:限制的是p,意思是不能修改p的本身的值,但是p指向的内容是可以通过p来改变的;
如:int m = 0; *p = m;

例:const int * const p =&a;
两边都不能更改;p 本身和p所指向的内容都不能改;

指针基本运算有三种: 指针 +- 整数 ; 指针 - 指针 ; 指针的关系运算;

指针+-整数:是表示指针所在的位置跳过多少个元素 *(p + i); i 表示跳过的元素个数
指针-指针:准确来说是指针-指针的绝对值得到的是指针和指针之间的元素个数 
 指针2 - 指针1 = i;
指针-指针的前提条件:   是两个指针指向同一块空间,同类型都不行;
指针就是地址,地址就是指针,地址-地址 == 指针-指针;

野指针:

概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)

局部变量不初始化的时候就是野指针;

int* p 不初始化就是随机值 --野指针;    需要提供限制,设置成空指针;int* p = NULL;

局部变量的地址是不能返回的,返回之后原局部变量的地址就已经销毁;不然返回的int* p就成为了野指针;

传值调用:

当实参传递给形参的时候,形参是有自己独立的空间的,形参是实参的一份临时拷贝,对形参的修改,不会影响实参;

传址调用:

传地址时:其实数组名就是数组首元素的地址;     arr == &arr[0];

数组名的理解:
1,数组名是数组首元素的地址(但是有两个例外)
a.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
b.&数组名,这里的数组名也表示整个数组,取出的是整个数组的地址
除此之外,所有的数组名都是数组首元素的地址;
&arr --- 是数组的地址   &arr + 1 ---就是跳过了一个数组;


        [] --仅仅只是个操作符      *(arr + i) == *(i+arr) ==i[arr];
 

一维数组传参:
1.一维数组传参的时候,传过去的是数组首元素的地址;
2,形参的部分可以写成指针的形式,也可以写成数组的形式,但本质上都是指针写成数组的形式是为了方便
test(arr):这里的arr没有单独放在sizeof的内部,也没有&,所以arr是数组首元素的地址,
 

二级指针变量就是用来存放一级指针变量的地址;

谢谢大家的阅读,希望对大家有帮助!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值