typedef声明数组及在二维数组申请中的应用
2012-03-12 16:48 钱吉 阅读(1305) 评论(0) 编辑 收藏 举报基础知识练习,随便写写,关于指针,数组,typedef的应用.
#define MAXLINE 1024 typedef 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; }