typedef声明数组及在二维数组申请中的应用

来源:互联网 发布:手游录屏软件哪个好 编辑:程序博客网 时间:2024/04/20 05:50

基础知识练习,随便写写,关于指针,数组,typedef的应用. 

#define MAXLINE 1024typedef char Pom[MAXLINE];int main(){    char *pTest[10] = {"abcd","defg"};//指针数组初始化    char MyArray[MAXLINE] = {"hello,world!"};    char *p1 =MyArray;    char **p2 = &p1;//指针的指针。pp3=&pp是错的,&pp为数组地址,&pp+1将指向数组的最后,即加一相当于指针移动数组长度    Pom *Vec = (Pom*)pTest;    char *p3; //p3指向内存某一区域    Vec = (Pom*)p3;//强制转换,默认将p3指向的内存指定为数组区域,从p3指向的1024字节必须初始化,否则非法访问!    Vec = (Pom*)p1;//相当于Pom *Vec = (Pom*)MyArray;    printf("%s\n",*p1+1);//*p1指向数组pp的首地址。    char (*p)[MAXLINE];    Vec = p;//数组指针,与Pom*等价    //p = p3; error:无法从“char *”转换为“char (*)[1024]”,这个是常容易范的毛病    Pom *temp = new Pom[2];//temp->char[2][1024];    strcpy(*temp, "abcd");//temp相当于是二位数组的指针。    printf("%s\n",*temp);//result:abcd;    printf("%s\n",*temp+1);//result:bcd;移动到第一行的第二列    strcpy(*(temp+1), "efgh");    printf("%s\n",*(temp+1));//result:efgh,移动到第二行的开始    //strcpy(*(temp+2), "ijkl\0");//visit access!    delete []temp;    printf("%s\n",*temp);//内存已经释放,无法访问!原本以为会造成内存泄露,没想到已经释放了,说明用new事情的Pom类型内存块被看成是一维数组。如果是照一些古老    //办法,用两个循环去申请二维数组,到头来你还要去写一个循环去释放行数组,和列数组指针。    int na,nb;    char **pBiArray1 = new char*[2];    for (na=0; na<2; na++)    {        *(pBiArray1+na) = new char[3];    }    //print the address    for (na=0; na<2; na++)    {        for (nb=0; nb<3; nb++)        {            printf("%x\t",&pBiArray1[na][nb]);        }        printf("\n");    }    //free    for (na=0; na<2; na++)    {        delete []pBiArray1[na];    }    delete []pBiArray1;}
0 0