您的位置:首页 > 其它

二级指针与二维数组的秘密【二者不等】

2012-01-03 23:21 183 查看
View Code

第一种情况

char buf[10][5];         //可以解析为有10行字符串 每行5个字节
char (*p)[5] = buf;         //数组的指针p指向数组[5]   指针++ 跨度为5字节
char **tp = (char**)buf; //二级指针tp指向数组[10][5] 指针++ 跨度也就是10X5 = 50个字节

//对第一行进行赋值
strcpy(buf[0],"abc");
strcpy(p[1],"123");

//三者地址一样
printf("%s %s \n",buf[0],buf[1]);     //成功打印 解析度为一行 buf[1]一样有效
printf("%s %s \n",p[0],p[1]);       //成功打印 解析度为一行 p[1]一样有效
printf("%s",tp[0]);                //报错,解析度为整个数组,tp[1]会打印出未知的地址,错误的语法。

第二种情况

int fun(char**tp,char(*op)[5],char p[][5])
{
//三者地址都一样,前两者等价
printf("%s \n",p[0]);          //成功打印 解析度为一行 p[1]一样有效
printf("%s \n",op[0]);         //成功打印 解析度为一行 op[1]一样有效
printf("%s",tp[0]);            //报错,解析度为整个数组,tp[1]会打印出未知的地址,错误的语法。
return 0;
}

int main()
{
char buf[10][5];         //解析为有10行字符串 每行5个字节
//对第一行进行赋值
strcpy(buf[0],"abc");
fun((char**)buf,buf,buf);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: