[C++]指针和指向数组的指针[一维数组与指针]
形如:int型 数组 a[10]
1)&a[0] 地址常量;地址类型:int *型 ; 存储数组a的首地址
2) a 地址常量;地址类型:int *型 ; 存储数组a的首地址 即 a与 &a[0]等价
形如:指向一维数组的指针变量
如有定义: int a[10],*p;
①p = &a[6]; //表示将a[6]的地址赋给指针变量p
②p = a
p = &a[0] //均表示将数组a的地址(or a[0]的地址)赋给指针变量p
形如:指针可进行的运算
预先定义:指针变量p,数组a[10],正整数n;
1)指针 ± 数值 【实际值:p±n*size | 其中size指p的基类型所占用的存储字节数】
p - n : 指向a[i]前面的第n个元素;
※若定义:*p = a;
则:
*(a+i) 或者 a[i]
*(p+i) 或者 p[i] //四者意义:访问数组a中的第i个元素
本质与区别:
1.p与a数据类型均为int *型;
2.p是指针变量;a是指针常量(指向不可改变)
2)指针 -指针
前提:指向相同类型的指针变量可以相减
结果:两指针所指向的地址之间数据的个数(单位:数据类型,并非字节数)
Eg:
int *px,*py,n,a[5];
px = &a[1];
py = &a[4];
n = py - px; //结果:n = 3
n = px - py; //结果: n = -3
3)指针的比较运算(<,>,==,!=,<=,>=)
结果:1 or 0
Eg:px == py //两地址相同?0:1
px < py //px<py?0:1
px==NULL //px为空指针?0:1
即 真为0;假为1
--------------------------------------------------------------------------------------------------------
元素的地址: 元素的值:
a+i 数组名法 *(a+i) 数组名法
p+i 指针法 *(p+i) 指针法
&a[i] 下标法 a[i] 下标法
&p[i]下标法 p[i] 下标法
---------------------------------------------------------------------------------------------------------
典型例子1:分别求数组前十个元素和后十个元素之和
#include<iostream>
int fsum(int *array,int n) { //通用的求和函数
int i,s = 0;
for(i = 0;i<n;i++)
s += array[i]
return (s);
}
void main(void){
int a[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int shead ,stail;
shead = fsum(&a[0],10); //or fsum(a,10)
stail = fsum(&a[5],10) ; //or fsum(a+5,10)
---------------------------------------------------------------------------------------------------------
典型例子2:比较两字符串的大小:
int my_strcmp(char *s,char *p){
for(;*s==*p;s++;p++)
if(*s=='\0') reutrn (0); //如果都比较到最后一个字符了,那么二者相等
}
[C++]指针和指向数组的指针[一维数组与指针]的更多相关文章
- PHP开发小技巧③—实现多维数组转化为一维数组
在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...
- 二维数组转化为一维数组 contact 与apply 的结合
将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...
- [Swift]多维数组的表示和存储:N维数组映射到一维数组(一一对应)!
数组:有序的元素序列. 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编号称为下标.数组 ...
- Python数组操作将一维数组变成二维数组
一.问题 我们在进行数组操作的时候会遇到将一个低维的数组变成一个高维的素数组 二.解决 第一种方法基本思路就是将低维数组进行等长的循环,在第一次为零的情况下,需要添加一个[]数组,原因是将它的基本框架 ...
- 题目要求:传入数组 内容为[['lisi','男','27'],['wangwu','男',18],['zhaoliu','男','30']],将此二维数组转化为一维数组,创建自定义函数完成
//自定义函数 function getOne($arr){ $str = ''; //定义空的字符串,用来接收值 foreach ($arr as $key=>$value){ //循环遍历数 ...
- 将二维数组转换成一维数组(基于reduce)
reduce:不改变原数组,返回一个新的数组.就是遍历数组元素,从头开始,依次往下,第一个参数是上一次的返回值,第二个参数是下一个数组元素,首次的时候第一个和第二个参数分别是 array[0], a ...
- php数组去重(一维数组)
<?php $arr = ['1', '1', 'PHP', 'PHP', 2, 3]; print_r($arr); echo "<br>"; print_r( ...
- php二维数组转成一维数组
$arr是需要转换的数组集合 array_reduce($arr, 'array_merge', array());
- python算法:嵌套数组转变成一维数组
比如,输入是:[2, 1, [3, [4, 5], 6], 7, [8]] 则,输出是:[2, 1, 3, 4, 5, 6, 7, 8] def list_flatten(l, a=None): a ...
- C++入门经典-例6.10-将多维数组转换成一维数组
1:代码如下: // 6.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
随机推荐
- python之查询指定目录下的最新文件
使用os模块查询指定目录下的最新文件 import os # 输入目录路径,输出最新文件完整路径 def find_new_file(dir): '''查找目录下最新的文件''' file_lists ...
- 深度学习网络压缩模型方法总结(model compression)
两派 1. 新的卷机计算方法 这种是直接提出新的卷机计算方式,从而减少参数,达到压缩模型的效果,例如SqueezedNet,mobileNet SqueezeNet: AlexNet-level ac ...
- query的set能添加多个
- Socket网络编程--Libev库学习(1)
这一节是安装篇. Socket网络编程不知不觉已经学了快两个月了.现在是时候找个网络库学学了.搜索了很多关于如何学网络编程的博客和问答.大致都是推荐学一个网络库,至于C++网络库有那么几个,各有各的好 ...
- UVALive5876-Writings on the Wall-KMP
有两段字符串,第一段的尾和第二段的头可能重合.问有多少种组合的可能. 需要理解一下next数组的意义. #include <cstdio> #include <cstring> ...
- SVM学习笔记-线性支撑向量机
对于PLA算法来说,最终得到哪一条线是不一定的,取决于算法scan数据的过程. 从VC bound的角度来说,上述三条线的复杂度是一样的 Eout(w)≤Ein0+Ω(H)dvc= ...
- 自学Linux Shell16.3-函数递归+创建库
点击返回 自学Linux命令行与Shell脚本之路 16.3-函数递归+创建库 1. 函数递归 递归调用函数是指函数调用自身进行求解. 通常,递归函数有基值,函数最终递推到达该值. 许多高级数学算法使 ...
- JavaScript 获得 坐标
<!DOCTYPE html> <html> <head> <title>location</title> <meta http-eq ...
- 【BZOJ4822】[CQOI2017]老C的任务(扫描线)
[BZOJ4822][CQOI2017]老C的任务(扫描线) 题面 BZOJ 洛谷 题解 没有修改操作,都不需要分治了... 直接排序之后扫描线算贡献就好了... 不知道为啥洛谷上过不了... #in ...
- 【BZOJ2246】[SDOI2011]迷宫探险(搜索,动态规划)
[BZOJ2246][SDOI2011]迷宫探险(搜索,动态规划) 题面 BZOJ 洛谷 题解 乍一看似乎是可以求出每个东西是陷阱的概率,然而会发现前面走过的陷阱是不是陷阱实际上是会对当前状态产生影响 ...