【问题标题】:Can i retrieve 1-D array address from 2-D array?我可以从二维数组中检索一维数组地址吗?
【发布时间】:2016-01-29 07:15:11
【问题描述】:

我对编程完全陌生。此代码无法按我的意愿工作,即从二维数组中检索一维数组地址:

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

【问题讨论】:

  • "is not working" 是您可以给出的或多或少有价值的错误描述。请更准确地说,您期望什么以及您实际得到什么。
  • 你提交的代码没问题,使用%p而不是%u以十六进制格式打印地址。
  • (int*)s + i代替s[i],也用%p代替%u
  • @BLUEPIXY s[i] 本身是一个指向每一行的地址,他在正确的轨道上
  • @jblixr OP 想要检索一维数组地址。

标签: c arrays data-structures


【解决方案1】:
#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 * 作为传递参数。

【讨论】:

    【解决方案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]&amp;(s[i])的区别在于,s[i]一维数组,类型是int[2],其中&amp;(s[i])是指向int[2]的指针,你想要什么。

    例如,您可以通过sizeof 运算符看到它:sizeof(s[i]) 在这里是2 * sizeof(int),其中sizeof(&amp;(s[i])) 具有指针变量的大小。

    【讨论】:

    • s[1]&amp;(s[i]) 实际上是指向同一个地址的指针,但属于不同的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多