我可以从二维数组中检索一维数组地址吗?

时间:2016-01-29 07:15:11

标签: c arrays data-structures

我对编程完全陌生。这段代码不能正常工作,即从二维数组中检索一维数组地址:

#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] ) ;
}

2 个答案:

答案 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)的大小为指针变量。