我对编程完全陌生。这段代码不能正常工作,即从二维数组中检索一维数组地址:
#include<stdio.h>
main() {
int s[4][2] = {
{ 1234, 56 },
{ 1212, 33 },
{ 1434, 80 },
{ 1312, 78 }
};
int i ;
for ( i = 0 ; i <= 3 ; i++ )
printf ( "\nAddress of %d th 1-D array = %u", i, s[i] ) ;
}
答案 0 :(得分:6)
#include<stdio.h>
int main( )
{
int s[4][2] = {
{ 1234, 56 },
{ 1212, 33 },
{ 1434, 80 },
{ 1312, 78 }
} ;
int i ;
for ( i = 0 ; i < 4 ; i++ )
printf ( "\nAddress of %d th 1-D array = %p\n", i, (void *)s[i] ) ;
return 0;
}
正如您在发布的代码中看到的那样,使用%p
格式来打印地址。此格式说明符需要void *
作为传递的参数。
答案 1 :(得分:2)
为了更精确而不使用C函数,通过指向函数的指针传递数组(此处为printf()
),您可以在此处使用指向数组的指针:
for ( i = 0 ; i < 4 ; i++ ) {
int (*ptr)[2] = &(s[i]);
printf ( "\nAddress of %d th 1-D array = %p\n", i, (void*)ptr) ;
}
s[i]
和&(s[i])
之间的区别在于,s[i]
是1d数组,类型为int[2]
,其中{{1} }}是指向&(s[i])
的指针,你想要的是什么。
例如,您可以使用int[2]
运算符查看它:sizeof
此处为sizeof(s[i])
,其中2 * sizeof(int)
的大小为指针变量。