回 帖 发 新 帖 刷新版面

主题:c++指针数组问题求教

初学C++  看到了数组指针部分  看到一个事例  但是事例中为什么会显示4行没懂
    指针难道还和行  还有几个地方没懂 在代码注释里  忘高手指教


#include "stdafx.h"
#include<iostream>
using namespace std;

#define V_LINES 4
#define H_LINES 7

int main(int argc, char* argv[ ])
{
    char szEnglishCharacter[V_LINES][H_LINES] = {            //定义二维数组,存储26个字母
        {'A','B','C','D','E','F','G'},
        {'H','I','J','K','L','M','N'},
        {'O','P','Q',' ','R','S','T'},    
        {'U','V','W',' ','X','Y','Z'}
};
char *pszCharacter[V_LINES]={NULL};                    //声明数组指针,为4个指向字符型的指针
for (int nLoop = 0 ; nLoop<V_LINES; nLoop++){
    pszCharacter[nLoop] = ; szEnglishCharacter[nLoop]    、*/将4行字符的各行首地址分别赋给4个指针 (pszCharacter[nLoop] = ; szEnglishCharacter[nLoop]  数组是2维数组[H_LINES] 省略了是不是说会被认为是[] )*/
}
for(int nLoop_V = 0 ; nLoop_V<V_LINES; nLoop_V++){        //循环输出
    for (int nLoop_H = 0; nLoop_H<H_LINES; nLoop_H++){
        cout<<pszCharacter[nLoop_V][nLoop_H]<<" ";        /*输出字符(这里输出但是显示结果为4行 为什么呢 而且定义的数组指针是1维啊 这里为什么pszCharacter[nLoop_V][nLoop_H] )*/
    }
    cout<<endl;                                    //换行
};
return 0;
}

回复列表 (共4个回复)

沙发

一维指针数组在这里指向了一个二维数组
第一个循环的作用就是让一维指针数组的每一个元素分别指向二维数组每一行的首地址
指向成功后,指针数组的每一个元素对应原二维数组的一行,也就可以按照二维数组的方式访问元素了

混用指针和数组,这种风格严格来说容易造成混淆
不容易发生混淆的写法是:
cout<<*(pszCharacter[nLoop_V]+nLoopH)<<" ";
现在明白为什么可以这么用了吧,写成数组访问的形式只是实现手段,实质上还是要做:访问(*)指针数组第nLoop_V个元素偏移nLoopH个位置的内存

板凳

谢谢   者问题昨天晚上想了半天就都明白  现在终于理解了

3 楼

深圳华信群英科技有限公司,目前主要从事软件外包开发、高级软件人才定向输送等业务,面对日益严峻的大学生就业难和IT企业招聘难,自2006以来,与知名通信软件公司正式签订定向输送人才的合作协议,针对想进入软件行业的人员提供企业实训,实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段,共计900学时。
企业订单委培,内训前签订就业安置协议,100%保证就业。实训结束之后,在华信群英科技及其战略合作伙伴从事通信软件研发工作。欢迎有意向者加QQ:649846168咨询。

4 楼

学习中,刚学习到数组指针

我来回复

您尚未登录,请登录后再回复。点此登录或注册