指针进阶1

简介: 指针进阶1

大家好,今天小魏来发表自己对指针的认识啦,如有错误,请大佬斧正!


我们通常所说的指针其实就是指针变量,它是一个变量,用来存放地址,内存会划分为一个个小的内存单元,每个内存单元都有自己的编号,这个编号就是这个内存单元的地址,用指针来存放。


我们用图就更清楚了


因此,内存编号=地址=指针

当要存储指针或者地址时就用指针变量来存储

指针大小与其类型无关,主要看编译器所处的环境,如我们所使用的的编译器VS2019的x86环境,也就是我们所说的32位平台,就是4个字节的大小,而在64位平台上就是8个字节


指针是有类型的,而它的类型决定了这个指针+1或-1跳过的元素数,比如整形指针+1或-1跳过4个元素,而字符型指针跳过1个

指针也是可以进行运算的

可以进行指针+-整数

可以进行指针-指针(不能进行指针+指针)


可以进行指针的关系运算,比如比大小

这个不可以的,指针大小为4个字节,而这个字符串有7个字节,这是错误的做法

大家猜一猜这段代码的运行结果是啥呢,反正我第一次做这个题的时候做错了,我认为这两个都相等,其实不然

我们来分析一下  上图


下面让我们来区分几个概念

1.指针数组

顾名思义,指针数组是数组,是用来存放指针的数组,举个例子

 

这个arr是int*类型的


这里的arr1,arr2,arr3代表的是数组首元素地址,用 pc这个指针来存放地址,这也是一个指针数组,存放的三个元素。


注意,一般来说数组名基本都代表数组首元素地址。但有两个特例,第一个是sizeof(数组名),它代表的是整个数组。第二个是&arr,代表取出的是整个数组的地址。



这样就可以访问到这个数组了,这里就相当于模拟了一个二维数组,parr[3]当中就存放了第一行第二行第三行的地址,二维数组中一行代表一个元素,然后再利用+j来访问具体的元素,要注意二维数组在内存中是连续存放的。


2.数组指针


数组指针是指针。


例如int(*p)arr[10]  这就是一个数组指针。在规定中[]的级别比*高,所以要打括号


把名字去了就是其类型,这个的类型为int  (*)[10]


例  int(*p)arr[10]=&a


p是一个指针,指向数组arr[10],所以p叫数组指针


char* arr[5]


char*    (*p)=&arr


要存放地址,肯定要用指针,而且这个数组是char*类型的,所以就要这样表示


一维数组传参时,调用函数形参可用数组,也可用指针


二位数组也是如此


预知后事如何,且听下回分解

相关文章
|
5月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
5月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
5月前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
5月前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)
|
5月前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
5月前
|
搜索推荐
指针进阶(2)
指针进阶(2)
47 4
|
5月前
指针进阶(3)
指针进阶(3)
41 1
|
5月前
|
C++
指针进阶(1)
指针进阶(1)
43 1
|
5月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
42 2
|
5月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
49 0