语法 :数据类型 * 指针变量名;
int a = 10; //定义指针,并让指针记录a的地址; int *p = &a ; // &取地址符号 cout<<“a的地址”<< &a <<endl; //结果是一串16进制数值,即a的地址 cout<<“指针p为:”<< p <<endl; //与上面结果一样 //使用指针 //通过 解引用(*p)的方式来找到指针指向的内存 *p = 100; //对p指向内存存储的数据进行修改等操作32位操作系统下,所有类型的指针都占4个字节!
int a =10; int *p = &a; //指针所占内存空间 占4个字节(32位操作系统下,所有类型的指针) cout<<sizeof(p)<<endl; //cout<<sizeof(*p)<<endl; //cout<<sizeof(int*)<<endl;意思一样空指针:指针变量指向内存编号为0的空间
int *p = NULL; //可以用于初始化指针变量 //内存编号0-255为系统占用内存,不可被用户访问野指针:指针变量指向非法 的内存空间
int * p = (int *)0x1100; //p指向内存地址为0x1100的空间,访问时会报错空指针和野指针都不是我们申请的空间,不可以访问!
利用指针访问数组元素
int arr[] = {1,2,3,4,5}; int *p = arr; //数组名arr就是数组首地址!!!!! //利用指针访问数组的第一个元素 cout<< *p << endl; p++; //让指针后移一位(4个字节) //利用指针遍历数组 for(int i = 0 ;i < 10; i++){ cout<< *P <<endl; P++; }利用指针做函数参数,改变实参的值
//值传递 void swap01(int a,int b) { int temp = a; a = b; b = temp; } //地址传递 void swap02(int *p,int *p1) { int temp = *p; *p = *p1; *p1 = temp; } int main() { int a =10, b = 20 ; swap01(a,b); //不会改变实参 a=10,b=20 swap02(a,b); //会改变实参 a=20,b=10 cout<<a<<b<<endl; return 0; }例:封装函数,利用冒泡排序,实现对整型数组的升序排列
int arr[10] = {1,5,9,8,7,4,6,3,10,2};
#include <iostream> using namespace std; void bubbleSort(int arr[] ,int len) /*数组做形参,此时的数组变量退化为数组首元素的地址 int arr[]=int *arr 这两种方法在函数中对数组参数的修改都会影响到实参本身的值,根据之前所学,形参是实参的一份拷贝,是局部变量,但是数组是个例外 */ { for(int i = 0 ;i < len-1; i++) { for(int j= 0 ;j < len-1-i;j++){ if(arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } int printArray(int arr[],int len) { for(int i =0 ;i<=len-1;i++){ cout<<arr[i]<<endl; } } int main() { //1.创建一个数组 int arr[10] = {1,5,9,8,7,4,6,3,10,2}; //2.构造冒泡排序函数 //求数组长度 int len = sizeof(arr)/sizeof(arr[0]); bubbleSort(arr,len); //3.打印出排好的数组 printArray(arr,len); return 0; }数组做形参!此时调用函数时,相当于传址,而不是传值,会改变数组元素的值.
例如:void life(int a[]); 若在life函数中有a[i]++;等语句,那么对应的数组元素会被修改,调用时直接用 life(a); 即可
~
对于高维数组来说,可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void fun(int array[3][10]);
void fun(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略
实参数组维数可以大于形参数组,
实参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。