指向数组的引用;指向数组的指针;指向类成员的指针;指向类数组成员的指针;二维字符串数组指针

原创 2012年03月31日 11:41:27
1、指向数组的引用
int num[10];
int (&rNum)[10] = num;
cout << rNum[1] << endl;

2、指向数组的指针
int num[10];
int (*pNum)[10] = &num;
cout << (*(pNum))[1] << endl;

注:int[] 和 int*不是同一种类型


补:指针类型数组

    int A[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
    int *p[3],**pA;
    p[0]=A[0];//保存每行的行首地址到指针数组p
    p[1]=A[1];
    p[2]=A[2];
    pA=p;//行首地址指针数组的首地址=》pA,注意是指针的指针。
    printf("第1行第2个数%d\n",*(*(pA+1)+2));


3、指向类成员的指针
指向类成员的指针并非一般意义上的指针,它的值并非是一个真实的地址,而像是一个类成员在类中的偏移
struct stru
{
    int a;
    CString b;
};

int stru::* pA = &stru::a;
CString stru::* pB = &stru::b;

类似于使用普通类成员对象的标识符. 使用类成员指针的关键字是.*或->*
stru s;
s.*pA;// 使用成员a
s.*pB;// 使用成员b

4、指向类数组成员的指针
struct stru
{
    int a;
    CString b;
    TCHAR szE[10];
};

stru s11;

// 定义一个指向stru的szE[10]数组的指针
char (stru:: *pC)[10] = &stru::szE;
    
// 访问数组用的一个元素
char c = (*(&(s11.*pC)))[1];// VC6,编译器的问题,必须先&再*,绕一下
char c = (s11.*pC)[1];    // VS2010,可直接用

// 访问整个数组
CString ss = (*(&(s11.*pC)));// VC6
CString ss = s11.*pC;// vs2010

5、二维字符串数组指针

    // 假设目标是8个长度为5的字符串
    int nNum = 8, nLen = 5;

    char *pA[1];// 不必定义为 char *pA[8]

    // malloc出内存的目的是存字符串,所以它一定是要赋予char*类型

    /* 方法1 */
    pA[0] = (char*)malloc(nNum*nLen);

    memcpy(pA[0], "abc", 4);
    memcpy(pA[0] + nLen, "def", 4);

    printf("%s\n", pA[0]);
    printf("%s\n", pA[0] + nLen);
    free(pA[0]);

    /* 方法2 */
    // 假设有个字符串首地址是m,char*类型的q变量存的是字符串首地址m,
    // char**类型的p变量存的则是q变量自身的地址,因此在p和m之间必然
    // 需要一个变量充当q的作用,因此单独定义的char** p是无法使用它
    // 操作目的字符串的。
    char **p;

    p = pA;
    *p = (char*)malloc(nNum*nLen);

    memcpy(*p, "abc", 4);
    memcpy(*p + nLen, "def", 4);

    printf("%s\n", *p);
    printf("%s\n", *p + nLen);
    free(*p);


版权声明:本文为博主原创文章,未经博主允许不得转载。

数组的指针、指针数组以及指向指针的指针

考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。一维数组在c和c++中数组的指针就是数组的起始地址(也就第...
  • kyo34080800
  • kyo34080800
  • 2011年03月17日 08:30
  • 3260

关于数组指针和指向数组指针的指针及其new

今天在CSDN上看到了wp123456xt对我很久以前的一篇文章——方正面试的题-找出字符串最多的分解方法http://blog.csdn.net/shizhixin/article/details/...
  • ShiZhixin
  • ShiZhixin
  • 2011年12月07日 17:28
  • 11137

对多维数组名、指向数组的指针和指针数组的理解

今天新开的博客,有点小激动。。。。。。听说要成为一个好的程序员必须要写博客,虽然不太明白为什么,但就当写日记好了。。。 写之前先#define WORD '我的内心是崩溃的' 这词目测在这里要用到太...
  • SuzumiyaSAMA
  • SuzumiyaSAMA
  • 2015年12月13日 22:26
  • 945

指向数组的指针

   数组的名字代表了此数组的首地址,对数组再取地址,它的值仍是相同的。        int a[5] = {1,2,3,4,5};  a ,&a  它们的值是相同的对数组取地址,类型可以当做指向此...
  • weixing979
  • weixing979
  • 2007年12月01日 02:52
  • 12699

C语言数组名及指向数组指针的小结

C语言数组名及指向数组指针的小结2012-03-13  happy123g...   阅 2133  转 13转藏到我的图书馆微信分享:C语言的数组名和对数组名取地址转自: http://blog.c...
  • qq_24373811
  • qq_24373811
  • 2016年09月05日 09:06
  • 396

C语言中二维数组、二维指针、指向指针的数组、指向数组的指针

C语言中二维数组、二维指针、指向指针的数组、指向数组的指针二维数组是形如char a_name[][10]的数组,其中二维数组的第二维必须是一个const(常量),第一维可以不用设置。二维指针是形如c...
  • luoding008
  • luoding008
  • 2008年06月24日 19:32
  • 5649

C/C++——指向函数的指针和指向函数的指针的数组

指向函数的指针 指向函数的指针的数组
  • Linux_ever
  • Linux_ever
  • 2016年03月15日 22:06
  • 1159

指针数组和数组指针分别是如何指向二维数组的

//注意指针数组和数组指针分别是如何指向二维数组的 #include main() {     static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};...
  • Sayesan
  • Sayesan
  • 2014年09月02日 10:22
  • 3729

数组指针,字符串指针的几种定义方法

一:数组指针的定义方法int a[10] = {1,2,3,4,5,6,7,8,9,0}; int * p; p = &a[0]; // 等价于p = a;2.int a[10] = {1,2,3...
  • TAaron666
  • TAaron666
  • 2017年07月25日 10:15
  • 374

二维指针、二维数组、指向数组的指针 函数参数传递

int arr[3][3] 的本质是指向数组的指针即 int  (*p)[3],所以二维数组名可以传递给foo( int (*arr)[3]) ,或者foo(int [][3]),但是不能传递给foo...
  • kimuwu
  • kimuwu
  • 2014年12月27日 22:44
  • 1973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指向数组的引用;指向数组的指针;指向类成员的指针;指向类数组成员的指针;二维字符串数组指针
举报原因:
原因补充:

(最多只允许输入30个字)