#include<stdio.h>
int main()
{
int s[4][2]={
{1234,56},
{1212,33},
{1434,80},
{1312,78},
};
int (*p)[2];
int i,j,*pint;
for(i=0;i<=3;i++)
{
p=&s[i];
pint=(int *)p;
printf("\n");
for(j=0;j<=1;j++)
printf("%d\t",*(pint+j));
}
return 0;
}
在这段代码中,程序员使用了两个指针变量&#39; p&#39;和品脱&#39;?我不能只使用&#39; p&#39;变量?
答案 0 :(得分:0)
p
和pint
都将冗余任务作为中间变量。你是正确的,你可以在没有pint
的情况下获得相同的结果,但是如果没有p
或pint
,你也可以获得相同的结果。
根据我的经验,for
循环最好写成for (i = start; i < end; i++)
而不是for (i = start; i <= end - 1; i++)
。考虑到这一点,不使用p
或pint
的代码示例可能是:
int main()
{
int s[4][2]={
{1234,56},
{1212,33},
{1434,80},
{1312,78},
};
int i;
for (i = 0; i < 4; i++)
{
int j;
for (j = 0; j < 2; j++)
printf("%d\t", s[i][j]);
printf("\n");
}
return 0;
}
在表达式中使用时,数组类型通常衰减指向第一个元素的指针类型。理解数组类型和指针类型仍然是不同的是至关重要的。在某些情况下,数组类型不会衰减到指针类型,特别是当它是sizeof
或&
的操作数时。
答案 1 :(得分:0)
如果你想使用指向数组变量的指针来打印数组元素。试试这个......
#include<stdio.h>
int main()
{
int s[4][2]={
{1234,56},
{1212,33},
{1434,80},
{1312,78},
};
int (*p)[2];
int i,j;
p=s;
for(i=0;i<=3;i++)
{
for(j=0;j<=1;j++)
printf("%d\t",p[i][j]);//(or) printf("%d\t",*(*(p+i)+j));
printf("\n");
}
return 0;
}
答案 2 :(得分:0)
是的,只有p
才足够结帐:(注意:这取决于他们可能尝试理解指针概念的目的)
int main()
{
int s[4][2]={
{1234,56},
{1212,33},
{1434,80},
{1312,78},
};
int (*p)[2];
int i,j;
p=s;
for(i=0;i<=3;i++)
{
for(j=0;j<=1;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
return 0;
}
在您的代码中,他们会尝试解释如何创建2D pointer
以及此2D pointer
如何将row
指向2D array
;此处p=&s[i];
p
指向2D数组s
的第一行。现在pint=(int *)p;
此处int
指针pint
指向2D数组s
的第一行。最后使用指针pint
作为*(pint+j)
打印值。