当前位置:首页 > C++目录 > 正文内容

指针(二):指针与数组

亿万年的星光5年前 (2021-08-10)C++目录20505

1.指针与数组的关系

    指向数组的指针变量称为数组指针变量。“数组是内存上一块连续的空间”。数组名就是这块连续空间的首地址。


2.指针指向数组


    一开始的数组定义与输出:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int a[10];
	for(int i=0;i<5;i++){
		cin>>a[i];
	}
	for(int i=0;i<5;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}

指针操作也可以输入数据:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int a[10];
	for(int i=0;i<5;i++){
		scanf("%d",a+i); //本来写成scanf("%d",&a[i]); 
	}
	for(int i=0;i<5;i++){
		printf("%d ", *(a+i));  //
	}
	return 0;
}

上面这个操作,本来scanf("%d",&a)写法,其中&是取地址符,a是数组名,本来就表示数组空间的首地址,所以可以直接用。注意,这个地方不能用cin。

数组指向指针操作:

我们可以定义指针变量,让它来指向数组名。

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int a[10];
	int *p=a;  
	for(int i=0;i<5;i++){
		scanf("%d",p+i); //本来写成scanf("%d",&a[i]); 
	}
	for(int i=0;i<5;i++){
		printf("%d ", *(p+i)); 
	}
	return 0;
}

2.指针的加减

指针也是变量,可以加减。

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int a[10]={1,2,3,4,5};
	int *pa=a;  
	cout<<a[0]<<endl; //结果是1 
	cout<<pa<<endl;   //0x70fdf0
	cout<<*pa<<endl;  //结果是1
	
	pa++;
	cout<<pa<<endl; //0x70fdf4
	cout<<*pa<<endl;  //2
	
	pa=pa+2;
	cout<<pa<<endl; //0x70fdfc
	cout<<*pa<<endl;  //4
	
	pa--;
	cout<<pa<<endl; //0x70fdf8
	cout<<*pa<<endl;  //3 
	return 0;
}


其他高级操作:

(1)数组名作为指针参数传递

#include <iostream>
using namespace std;

// 方式1:数组指针 + 大小参数
void printArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}


int main() {
    int arr[5] = {1, 2, 3, 4, 5};

    // 数组名自动退化为指针
    printArray(arr, 5);
    
    return 0;
}




(2)使用容器(推荐)

#include <iostream>
#include <vector>
using namespace std;
// 使用 vector
void printVector(const vector<int>& vec) {
	for (size_t i = 0; i < vec.size(); i++) {
		cout << vec[i] << " ";
	}
	cout << endl;
}
int main() {
	vector<int> vec;
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);

	printVector(vec);

	return 0;
}


这里加不加const的区别是:加入const后,原数组不能被修改,是只读状态,如果要赋值会报错


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【数论】杨辉三角

    【数论】杨辉三角

    一、起源 杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角...

    【高级篇】C++中的sort函数详解

    【高级篇】C++中的sort函数详解

    0.简介sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#...

    一笔画问题

    【题目描述】如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行...

    如何估算时间复杂度

    首先:  常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)时间复杂度可以简单理解为最多执...

    【数论】快速乘

    【数论】快速乘

    上一篇文章简单说了龟速乘的问题,有人觉得龟速乘还是太慢了,有没有什么办法再快一点,实际是有的,就是我们今天介绍的 快速乘。快速乘的原理和龟速乘不同,快速乘并不是基于二进制和位运算,严格来说,快速乘是利...

    【数论】常见的距离度量方法

    【数论】常见的距离度量方法

    一、欧式距离欧式距离(Eucliden Metric,也是欧几里得度量)是一个通常采用的距离定义,旨在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点距离)。在二维和三维空间中的欧氏距...