为什么代码使用了2个指针变量
问题描述:
#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;
}
在这段代码中,程序员使用了两个指针变量'p'和'pint'?我不能仅通过使用'p'变量来获得结果吗?为什么代码使用了2个指针变量
答
是唯一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
可以分在A row
来自2D array
;这里p=&s[i];
p
指向2D阵列第1行s
。现在pint=(int *)p;
这里是一个int
指针pint
指向您的二维数组的第一行s
。最后使用指针pint
作为*(pint+j)
来打印值。
答
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
或&
的操作数时。
答
如果要打印使用指针数组变量数组元素..尝试这个...
#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;
}
这里既不需要'p'也不需要'pint' ... – dreamlax 2014-10-03 04:02:52
你可以使用'p'或'pint'或两者都不使用;你的选择。总的来说,这也不是最好的选择。印刷最后可以用换行符来完成。演员是残酷的。它很有效,但这就是你可以说的一切。类型正确的赋值是'pint = * p;'。 – 2014-10-03 04:05:07
这只是一个名为“数组中的指针”的主题中的练习题,所以我必须仅使用指针来完成此操作。 – Neeraj 2014-10-03 04:11:35