(17)指针和数组
来源:互联网 发布:淘宝黑搜任务怎么做 编辑:程序博客网 时间:2024/06/02 06:47
在C++语言中,指针和数组有非常紧密的联系,使用数组的时候编译器一般会把它转换成指针。对数组的元素使用取地址符就能得到指向该元素的指针。
数组有一个特性:在多数用到数组名字的地方,编译器都会自动的将其替换为一个指向数组首元素的指针。
当使用数组作为一个auto变量的初始值时,推断得到的类型是指针而非数组。
当使用decltype关键字时上述转换不会发生,decltype返回的类型仍然是数组。
指针也是迭代器:
迭代器支持的操作,数组的指针全部都支持。如何像迭代器一样遍历元素呢?
一通过数组名或者数组首元素的地址得到指向首元素的指针
二通过下标获取数组中尾元素下一位置的地址
标准库函数begin和end:
这两个函数与迭代器的两个重名成员功能类似,但是它们的正确使用形式是将数组作为它的参数
数组有一个特性:在多数用到数组名字的地方,编译器都会自动的将其替换为一个指向数组首元素的指针。
当使用数组作为一个auto变量的初始值时,推断得到的类型是指针而非数组。
当使用decltype关键字时上述转换不会发生,decltype返回的类型仍然是数组。
指针也是迭代器:
迭代器支持的操作,数组的指针全部都支持。如何像迭代器一样遍历元素呢?
一通过数组名或者数组首元素的地址得到指向首元素的指针
二通过下标获取数组中尾元素下一位置的地址
如:
int arr[10]={0,1,2,3,4,5,6,7,8,9};int *p=arr;//获取首元素指针int *e=&arr[10];//尾元素下一位置的指针for(int *b=p;b!=e;++b){cout<<*b<<endl;//输出arr元素}同样尾后指针不能执行解引用或者递增操作。
标准库函数begin和end:
这两个函数与迭代器的两个重名成员功能类似,但是它们的正确使用形式是将数组作为它的参数
int a [] ={1,2,3,4,5,6};int *pb=begin(a);int *pe=end(a);begin函数返回的是指向数组首元素的指针,end函数返回的是指向数组尾元素下一位置的指针,这两个函数定义在iterator头文件中。
解引用、递增、比较、与整数相加、两个指针相减等,用在指针和用在迭代器上意义完全一样。给一个指针加上(减去)某整数值,其结果仍是指针。新指针的指针相比之前前进(后退)了该整数值个位置。
两指针相减的结果是它们之间的距离。结果类型是一种名为ptrdiff_t的标准库类型,和size_t一样,ptrdiff_t也是一种定义在
cstddef头文件中的机器相关类型,但是ptrdiff_t是一种带符号类型。
解引用和指针交互使用:
int b[] = {1,2,3,4,5,6};int *p = b;int i= *(p+2);//i的值为b[2]的值
int *pt = &b[2];int j = ptr[1];//等价于*(ptr+1),就是b[3]表示的那个元素int k = ptr[-1]//等价于*(ptr-1),就是b[1]表示的那个元素
0 0
- (17)指针和数组
- 指针数组和数组指针(C)
- 指针数组和数组指针(转)
- 指针数组和数组指针(一)
- 指针数组和数组指针(C)
- 指针数组和数组指针(C)
- 指针数组和数组指针(笔记)
- 指针(4):指针数组和数组指针的区别
- C++ 指针 (数组和指针)
- 了解指针(3)-- 指针和数组
- 指针和指针数组
- 指针数组和数组指针
- 指针数组和数组指针
- 指针数组和数组指针
- 指针数组和数组指针
- 数组指针和指针数组
- 指针数组和数组指针
- 数组指针和指针数组
- 浅析RXjava
- jQuery的$.fn和$.extend
- C语言中的输出格式和sprintf详解
- 基于Retinex理论的图像增强
- SpringMVC在IDEA上的配置问题
- (17)指针和数组
- 动态规划初步认识之二
- 自定义类型转换
- 欢迎使用CSDN-markdown编辑器
- 洛谷1197星球大战
- LeetCode No.416 Partition Equal Subset Sum
- Eclipse安装反编译插件出错
- Android开发-DesignDemo-AndroidStudio(七)CoordinatorDemo(2)
- python中自定义排序函数