msg[]中的每个元素存放的都是地址(指针),指向MessageData类型
p是指向指针的,即指向 指向MessageData类型指针的指针msg[0]就是指向某个MessageData类型变量的指针
而p[0]可以指向msg[0]CString b="jj";
CString *a;
CString ** aa;
a=&b;
aa=&a;p[0]与msg[0]不能同等使用。

解决方案 »

  1.   

    不是吧,
    p是指向指针的指针,即指向MessageData类型指针的指针,
    msg[]中的每个元素存放的都是地址(指针),指向MessageData类型的指针,
    所以,
    p[0]等于msg[0],
    对于指针来说,[]下标运算和*效果一样,比如:*p==msg[0],*(p+1)==msg[1];
    欢迎指教
      

  2.   

    1.没有问题
    2.查内存泄漏CSDN上讨论很多。最简单的办法:在VC中用Go(F5)运行程序,完了以后看下面的信息
      

  3.   

    不能等同使用!
    p[0]是指向MessageData的指针!
    msg[0]是MessageData的实例!不过可以转换后使用!
    *p[0] 与msg[0]等同;
    另用 p=msg会有类型不匹配的错误!
      

  4.   

    看清楚再说,好不好?
    msg[0]是MessageData的实例吗?
      

  5.   

    请勿在struct中使用CString类型等不确定长度的成员
      

  6.   

    p[0]=msg[0],很显然!
    *(p)类型为messagedata*
    *(msg+0)类型也为messagedata*
    cmemstate检测内存漏洞
      

  7.   

    sorry,sorry.
    更正更正。
    p[0]和msg[0]是等同的
    msg[0]是指向MessageData类型的指针
    p是指向指针的指针,所以p[0]就是指针了,指向MessageData类型
      

  8.   

    to greenyard:那我如何事好?
      

  9.   

    我所存在的疑惑在于,如:
    int a[10];
    int *q;
    q=a;
    利用q++就可以遍历a数组,因为int 是占一个字节;但以上MessageData是一个结构,也不确定占用多少内存空间,p++会不会出错,但事实上,手边的程序运行是没有出错(即p[0]=msg[0])是可行的,但当p++时,指针p 自加的多少???VC 又是如何控制的????
      

  10.   

    没有问题的p++自动转移到下一个MessageData结构地址
    p移动的大小就是MessageData结构的大小
    你自己可以在debug中看吗
    看p++后的地址于之前的地址差异
      

  11.   

    如果MessageData结构的大小固定,当然可以,但CString长度不定,p++未必能成功,不知ammycute(春常) 有没有试过
      

  12.   

    现在,程序运行时没有发生问题!!p[0]=msg[0] 没有问题,而且p[0].szID也正常调用!!!但正如楼上所言,由于CString 的长度不确定,出现的问题的概率的也是有的。但不知会出现什么恶劣的、严重的后果。无法想象!!!不知VC对 CString 是如何保护的???现在,我的保险的做法是否是将CString 用定长的char 数组代替????
      

  13.   

    any body answer me??????
      

  14.   

    说CString长度不固定是错的,cstring的内容不是保存再cstring所再的内存空间,而是再cstring里有一个指向字符串的成员变量,字符串是保存这个指针所指向的空间,因为指针的长度是固定的 所以cstring的长度也是。
    还有说p++移动的字节数是结构的大小也是错的,p是指向指针的指针,他每++一次是增加指针长度的字节 也就是4个字节
      

  15.   

    freeboy777(自由男孩) 说的没错