青少年编程知识记录 codecoming

指针(二):指针与数组

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后,原数组不能被修改,是只读状态,如果要赋值会报错



作者:亿万年的星光 分类:C++知识 浏览: