C++指针与数组

来源:互联网 发布:淘宝新宝贝如何引流 编辑:程序博客网 时间:2024/05/17 22:19

通过指针引用数组——数组元素的指针,就是数组元素的地址,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址,所以指针也可以指向数组元素(把某一元素的地址放到一个指针变量中)

用数组对指针赋值

#include<iostream>using namespace std;#include<stdlib.h>void main(){int ar[10]={1,2,3,4,5,6,7,8,9,10};for (int i=0;i<10;++i){cout<<ar[i]<<endl;}//int a=10;//int *p=&a;int *p=ar;   //把 int型数组ar的首地址 赋值给 int型指针变量psystem("PAUSE");}

利用指针访问数组

#include<iostream>using namespace std;#include<stdlib.h>int ar[10]={1,2,3,4,5,6,7,8,9,10};void main(){for(int i=0;i<10;++i){cout<<ar[i]<<endl;   //底层为了效率高,把数组形式访问转换成*(ar+i)指针形式访问}int *p=ar;   //把数组首元素地址赋值给指针变量pfor(i=0;i<10;++i)   //循环过程指针p指向不变,p+1指向下1个空间{cout<<*(p+i)<<endl;   //p+i指向ar之后的第i各元素(不是字节,跟变量类型有关)}for(i=0;i<10;++i){cout<<*(ar+i)<<endl;}system("PAUSE");}


指针运算(指针+1),对应的字节改变

#include<iostream>using namespace std;#include<stdlib.h>void main(){int a=10;int *p=&a;cout<<p<<":"<<p+1<<endl;   //指针p所指向的类型多大,+1就加了多少字节double *pd=(double *)&a;   //对整型地址强制类型转换cout<<pd<<":"<<pd+1<<endl;system("PAUSE");}

#include<iostream>using namespace std;#include<stdlib.h>int ar[10]={1,2,3,4,5,6,7,8,9,10};void main(){for(int i=0;i<10;++i){cout<<ar[i]<<endl;   //底层为了效率高,把数组形式访问转换成*(ar+i)指针形式访问}int *p=ar;   //把数组首元素地址赋值给指针变量pfor(i=0;i<10;++i)   //循环过程指针p指向不变,p+1指向下1个空间{cout<<*(p+i)<<endl;   //p+i指向ar之后的第i各元素(不是字节,跟变量类型有关)}for(i=0;i<10;++i){cout<<*(ar+i)<<endl;}p=ar;for(;p<(ar+10);++p)   //指针运算++p,访问数组元素,循环移动指针指向{//cout<<"VALUE of p:"<<p<<endl;cout<<*p<<endl;}system("PAUSE");}

用数组名作为函数的参数,数组参数退化成指针

#include<iostream>using namespace std;#include<stdlib.h>//用数组名作为函数的参数void show_array(int br[])   //数组退化成指针,*br//函数的参数以数组形式传递,[]内的数字会被忽略掉{cout<<"size of br:"<<sizeof(br)<<endl;//数组作为函数参数不是传递整个数组,传递的是数组首元素的地址for(int i=0;i<10;++i){cout<<br[i]<<endl;}}void main(){int ar[10]={1,2,3,4,5,6,7,8,9,10};cout<<"size of ar:"<<sizeof(ar)<<endl;show_array(ar);system("PAUSE");}

#include<iostream>using namespace std;#include<stdlib.h>//用数组名作为函数的参数void show_array(double br[])   //数组退化成指针,*br//函数的参数以数组形式传递,[]内的数字会被忽略掉{cout<<"size of br:"<<sizeof(br)<<endl;//数组作为函数参数不是传递整个数组,传递的是数组首元素的地址for(int i=0;i<10;++i){cout<<br[i]<<endl;}}void main(){double ar[10]={1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10};cout<<"size of ar:"<<sizeof(ar)<<endl;show_array(ar);system("PAUSE");}