022day(指针和数组和指向指针的指针)
来源:互联网 发布:淘宝一口价设置技巧 编辑:程序博客网 时间:2024/06/15 08:06
172210704111-陈国佳总结《2017年11月1日》【连续022天】
标题:指针和数组和指向指针的指针;
内容:A.观看MOOC8.5,9.1;
B.(a).指针与数组:数组的名字是一个指针常量,指向数组的起始地址;
T a[N]: a的类型是T*;可用a给一个T*类型的指针赋值;a是常量,不能赋值;
作为函数形参时,T*p 和 T p[ ]等价;
例: int a[200]; int*p;
p=a; //让p指向数组a的起始地址a[0];
*p=10; //让a[0]=10;
*(p+1)=20; //让a[1]=20;
p[0]=30; //让a[0]=30 ; p[i]等效于*(p+i);
p[4]=40;
for(int i =0;i<10;++i)
*(p+i)=i; //对a数组的前10个元素进行赋值;
++p; //让p指向a[1];
cout<<p[0]<<endl;
p=a+6; //p指向a[6;]
cout<<*p<<endl;
return 0;
例2:void Reverse(int*p,int size){ //颠倒一个数组
for(int i=0;i<size/2;++i){
int tmp =p[i];
p[i] =p[size-1-i];
p[size-1-i]=tmp;
}
}
int main()
{
int a[5]={1,2,3,4,5};
Reverse(a,sizeof(a)/sizeof(int));
for(int i=0;i<5;++i){
cout<<*(a+i)<<",";
}
运行结果:
注明:以前提及函数中,形参是实参的拷贝,形参的改变不会影响实参;但数组特殊,其实质:将数组看作指针,经过函数后,其指向的地址不变,但内容发生了改变;
故形参依旧是实参的拷贝;
(b).定义二维数组:T a[m][n];
a[i]是一个一维数组(其中i是整数);a[i]的类型是T*;sizeof(a[i]) =sizeof(T)*N
a[i]指向的地址: 数组a的起始地址+i*N*sizeof(T)
应用上面的颠倒函数:
例:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Reverse(a[1],4);
for(int i=0;i<=2;++i){
for(int j=0;j<=3;++j)
cout<<a[i][j]<<" ";
}
Reverse(a[1],6);
cout<<endl;
for(int i=0;i<=2;++i){
for(int j=0;j<=3;++j)
cout<<a[i][j]<<" ";
}
可见,因为二维数组的数据是连续存放的,当超出a[1]时,函数会调用后面的数据,即a[2];
指向指针的指针:
定义:T ** p;
p是指向指针的指针,即p指向一个类型为T*指针的地方;*p 的类型为 T*;
实际运用:
int **pp; //指向int*类型指针的指针
int*p;
int n=1234;
p =&n; //p指向n
pp =&p; //pp指向p
cout<<*(*pp)<<endl; //*pp是p,*(*pp)是n
明日计划:学习指针与字符串;
- 022day(指针和数组和指向指针的指针)
- 指针数组,和指向指针的指针
- 指针数组和指向指针的指针
- 指针数组和指向指针的指针
- 数组指针和指向指针的指针
- 指向数组的指针和指针数组
- 指针数组和指向指针的数组
- 指针数组和指向数组的指针
- 数组指针、 指针数组、函数指针、函数指针数组和指向函数指针数组的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 二维数组和指向指针的指针
- 选择排序
- 关押罪犯(codevs1069)
- 提高代码阅读能力的7种方法
- 无标题Markdown(1)
- [BZOJ 3523] Bricks 贪心+优先队列/堆
- 022day(指针和数组和指向指针的指针)
- Android ListView组件的优化
- LeetCode-Easy-Java——Array Partition I
- 消息应答机制重复发送JMS(八)
- ZOJ 3993Safest Buildings (数学题)
- 日历命令 cal
- ch04_使用多个映射的例子
- 归并排序
- SetACL Studio [windows权限操作工具][翻译]