二级指针和二维数组
intmain(){char*onedp=NULL;//onedimensionarraychar**twodp=NULL;//twodimensionarraychar...
int main()
{
char *onedp = NULL; //one dimension array
char **twodp = NULL; //two dimension array
char a[3][16] = {"China_and_me", "c++", "It is a desk"};
int i = 0;
twodp = (char **)a;
for(i = 0; i < 3; i++)
{
printf("%s\n",a[i]);
printf("%s\n", twodp + i*4);
}
return 0;
}
请问一下,在输出语句printf("%s\n", twodp + i*4);中,为什么i*4? 展开
{
char *onedp = NULL; //one dimension array
char **twodp = NULL; //two dimension array
char a[3][16] = {"China_and_me", "c++", "It is a desk"};
int i = 0;
twodp = (char **)a;
for(i = 0; i < 3; i++)
{
printf("%s\n",a[i]);
printf("%s\n", twodp + i*4);
}
return 0;
}
请问一下,在输出语句printf("%s\n", twodp + i*4);中,为什么i*4? 展开
2个回答
展开全部
printf("%s\n", twodp + i*4); 严格来说这是错误的语句! twodp是二维指针,运算结果仍然是二维指针,所以用%s输出是错误的用法。
sizeof(char **)=4 (当然需要在32位编译系统上 ,64位会是8)
twodp+1会指向下一个地址,即跳过4个字节,你程序为了达到与a[i]输出同步的情况,因为a[3][16]的列是16,所以,twodp需要跳16个字节以到达相应的地址,你改成a[3][20] 你就会*5才可以了
sizeof(char **)=4 (当然需要在32位编译系统上 ,64位会是8)
twodp+1会指向下一个地址,即跳过4个字节,你程序为了达到与a[i]输出同步的情况,因为a[3][16]的列是16,所以,twodp需要跳16个字节以到达相应的地址,你改成a[3][20] 你就会*5才可以了
更多追问追答
追问
printf("%s\n", twodp + i*4);既然说用%s输出是错误的用法,为什么编译的时候不报错呢?
追答
这和编译工具和编译设置有关!有的会报警告有的会报错误,也有的直接通过。
展开全部
#include <stdio.h>
int main()
{
int n;//行数
int m;//列数
int i,j,k;
printf("请输入行数和列数:");
scanf("%d%d",&n,&m);
int **p;
p= new int*[n];
for(i=0; i<n; ++i)
p[i] = new int[m];
printf("请输入数组元素:");
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
scanf("%d",&p[j][k]);
}
printf("二维数组如下:\n");
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
printf("%d ",p[j][k]);
printf("\n");
}
for(i=0;i<n;i++)
delete[] p[i];
delete[] p;
return 0;
}
请采纳。
int main()
{
int n;//行数
int m;//列数
int i,j,k;
printf("请输入行数和列数:");
scanf("%d%d",&n,&m);
int **p;
p= new int*[n];
for(i=0; i<n; ++i)
p[i] = new int[m];
printf("请输入数组元素:");
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
scanf("%d",&p[j][k]);
}
printf("二维数组如下:\n");
for(j=0;j<n;j++)
{
for(k=0;k<m;k++)
printf("%d ",p[j][k]);
printf("\n");
}
for(i=0;i<n;i++)
delete[] p[i];
delete[] p;
return 0;
}
请采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询