指针(二):指针与数组
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后,原数组不能被修改,是只读状态,如果要赋值会报错
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。



