1.指针和数组
利用指针访问数组元素:
int arr[]={1,2,3,4,5,6,7,8,9};
int * p=arr; //arr就是数组的首地址,等价于int * p=&arr[0];
p++; //指针自动向后偏移访问下一个元素
用for循环即可遍历数组中的元素。
指针数组:(数组往往可用来存储东西)
储存地址的一串数组。
int arr[]={1,2,3,4,5,6,7,8,9,10};
int * p[10];
for(int i=0;i<10;i++)
{
p[i]=&arr[i];
}
for(int i=0;i<10;i++)
{cout<<p[i]<<'\t';cout<<*p[i]<<endl;}
return 0;
2.指针和函数
指针作为参数可改变实参的值:
值传递不改变实参的值。
地址传递:
int main()
{
int a=10;
int b=20;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
swap(&a,&b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
void swap(int * p1,int * p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
形参是额外开出内存定义出来的。
int main()
{
int a=10;
int b=20;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}
void swap(int & p1,int & p2)//取别名
{
int temp=p1;
p1=p2;
p2=temp;
}
可达到相同的效果。
3.指针数组和函数综合:冒泡排序
#include<iostream>
using namespace std;
void swap(int * p1,int * p2)//交换数据
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
void bubblesort(int * p,int len)//冒泡排序函数,(int arr[],int len)等效
{
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(p[j]>p[j+1])
swap(&p[j],&p[j+1]);
}
}
}
int main()
{
int arr[]={2,4,5,9,7,3,1,8,6,10};
int len=sizeof(arr)/sizeof(arr[0]);//判断数组長度,字符串数组也可使用。
bubblesort(arr,len);
for(int i=0;i<len;i++)
{
cout<<arr[i]<<endl;
}
return 0;
}