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

原创 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);


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

相关文章推荐

指针数组,指针指向const成员函数

#include using namespace std; class widget { void f(int) const { cout
  • xuchiyu
  • xuchiyu
  • 2016年04月07日 15:15
  • 230

为什么不能用二级指针直接指向二维数组

先上代码:int a[2][3]={1,2,3,4,5,6};//2行3列的int型数组int **pp=a;//编译出错,不能用二级指针直接指向二维数组int (*p)[3]=a;//对,p是指向一...

C/C++指向二维数组的指针

1. 二维数组  设有整型二维数组a[3][4]如下:     0 1 2 3     4 5 6 7     8 9 10 11   它的定义为: ...

指向二维数组的指针

在C++ Primer第四章遇到了二维数组和指针的内容,理解起来有点绕,这里做个小节。     在C++ Primer中介绍了一种访问二位数组的方式,定义一个指向一位数组的指针,通过这个指针访问二维...

C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量

C++学习笔记之六,本文为C++ Primer Plus 第十章对象和类的学习笔记,大抵分为以下几个小部分: 类Class的用法 类的构造函数和析构函数: const成员函数 this指针 对象数组 ...
  • zmdsjtu
  • zmdsjtu
  • 2016年09月06日 13:48
  • 667

C++:对象数组、对象动态申请和释放、类的定义和实现分开、this指针、常成员函数、时钟

一、对象数组的定义和初始化 1. 对象数组的创建方法:   //常量都是无名对象 1)类类型 数组名[元素个数]; 2)类类型 数组名[元素个数] = { 数组的初始化列表... }; 2. ...

指针指向字符串常量和数组存放字符串常量(char *p="abcd", char p[]="abcd")

指针指向字符串常量和数组存放字符串常量(char *p=”abcd”, char p[]=”abcd”)代码结果分析 fun()函数 首先abacd字符串是在静态常量区分配的内存,然后指针c在栈里分...
  • yeruo
  • yeruo
  • 2016年06月19日 11:12
  • 730

字符、字符数组(字符串)与指向字符串的指针

今天在写一个简单的面向连接的TCP Socket程序时(UNIX Network Programming上的时间服务器和客户端例子)。有个简单的改变是将从服务器返回的日期字符串 改成一个字符一个字符的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指向数组的引用;指向数组的指针;指向类成员的指针;指向类数组成员的指针;二维字符串数组指针
举报原因:
原因补充:

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