指针与指针数组
来源:互联网 发布:centos 网络监控 编辑:程序博客网 时间:2024/04/30 15:38
很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:
int a[3][4];
int **p = a;//错误
这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C++中严格说来没有二维数组。那么,你要用一个指针来记录a,就要用一个能表示“数组的数组”的指针,以下代码是正确的:
int (*p)[4] = a;//正确
只有这样才能保证++p使p指向a的下一对像(该对像是一个数组)。
顺便提一句:不要写成“int *p[4];”
int a[3][4];
int **p = a;//错误
这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C++中严格说来没有二维数组。那么,你要用一个指针来记录a,就要用一个能表示“数组的数组”的指针,以下代码是正确的:
int (*p)[4] = a;//正确
只有这样才能保证++p使p指向a的下一对像(该对像是一个数组)。
顺便提一句:不要写成“int *p[4];”
来看一下指针数组的指针怎么用,既然都是指针也应该支持动态内存分配,下面的例子展示了如何对数组的指针动态分配内存:
#include <stdio.h>int main(){ int array[3][5]={{1,2,2,4,4},{2,6,5,3,2},{3,5,7,3,5}}; int (*pa)[5]=array; int *pb[3]; int i=0; int (*pp)[5]; pp = (int (*)[5]) malloc(sizeof(int) * 3);//注:需要这样对指向数组的指针分配空间 pp = array; *pb=*pa; *(pb+1)=*(array+1); pb[2]=pa[2]; for(;i<3;++i){ int j=0; for(;j<5;++j) printf("%d",pb[i][j]); printf(" "); } printf("\npp pointer point to an array: \n"); for(i = 0; i < 5; i++) printf("%d ",(*pp)[i]); printf("\n"); return 0;}
运行结果:
C++ 使用new 可以这样写:
#include <iostream>using namespace std;int main(){ int (*p)[3]; int pp[2][3] = {1,2,3,4,5,6};// p = new int ((*)[])[3]; p = (int (*)[3])new int [3]; p = pp; for(int i =0; i < 3; i++) cout<<(*p)[i]<<" "; cout<<endl; p = pp + 1; for(int i =0; i < 3; i++) cout<<(*p)[i]<<" "; cout<<endl; return 0;}
运行结果:
下面使用一个函数指针数组来展示一下指针数组的用法:
#include <iostream>using namespace std;typedef void (*F)();void func_1(){ cout<< "func_1"<<endl;}void func_2(){ cout << "func_2"<<endl;}int main(){ F *p = (F *) new int [4]; p[0] = func_1; p[1] = func_2; p[0](); p[1](); return 0;}
注:这里指针数组主要是想说一下,函数指针数组如何动态分配。
make it simple, make it happen
0 0
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 看开心情才会明媚
- 网页背景100%平铺浏览器缩小背景显示不全
- A Swift Tour
- Oracle10g完全卸载正确步骤
- libSVM的使用
- 指针与指针数组
- Windows消息机制详解
- 项目经理如何识别员工需求?
- dict的特点及和list的区别
- (4.2.2)【android开源工具】Android SlidingMenu 使用详解
- 判断两个字串是不是回文构词(算法)
- HTML5 pdf viewer pdf.js
- Rs232/rs485/rs422接口比较总结
- cannot connect to vm 与uac