#include<stdio.h>
int main( )
{
int s[5][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 ", *( pint + j ) ) ;
}
return 0;
}
这是输出:
1234 56
1212 33
1434 80
1312 78
为什么 int(*p)[2]
中使用 2 。我们不能使用 3,4 或任何其他数字吗?
(int *)p 是什么意思?
还有p=&s[i];
的意义是什么?在代码中?
最佳答案
因为它是指向两个 int
数组的指针,并被分配了 s
的元素,这些元素也是两个 int
数组(必须匹配该数组的最后一个维度)。
这里实际上没有必要,因为它只是立即分配给 pint
的临时变量,因此可以直接从 s[i]
分配给 pint
.
另外你问的表达是错误的:
pint = (int *)p ;
应该是:
pint = *p ;
这在语义上是正确的。第一个只是因为指针指向数组开始的同一内存,但它很容易出错,因为编译器没有检查。
关于c - 理解C中指针的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159155/