簡體   English   中英

C編程 - 2D陣列的總和

[英]C Programming - Sum of 2D arrays

我試圖從2D數組中獲取對角線值。 例如..

10 20 30
10 20 30
10 20 30 

從我的代碼中,我將添加/求和index [0] [0]中的數字與索引1和索引[2] [2] USING POINTERS將計算為60.但是,當我構建並運行時,它返回計算而是內存地址。 誰能在這里解釋一下這個問題? (我是C編程和指針的新手)

void diagonals2D(int array[][SIZE], int rowSize, int colSize, int *sum)
{
    int count;
    *sum=0;

    for(count=0;count<SIZE;count++)
    {
        (*sum)+=*(array+count+count);
    }

}

在此輸入圖像描述

第一個參數調整為

int ( *array )[SIZE]

那是一個指針。

所以表達式array + count也有int ( * )[SIZE] 要獲取數組的相應“行”,您必須取消引用指針

*( array + count )

在這種情況下,你將在表達式中有一個int[SIZE]類型的對象

*( array + count ) + count

被隱含地賦予int *.類型int *.

現在取消引用整個表達式,您將獲得目標元素

*( *( array + count ) + count )

最好將函數聲明為具有可變長度數組的參數。

這是一個演示程序

#include <stdio.h>

void diagonals2D( long long int *sum, size_t n, int a[n][n] )
{
    *sum = 0;

    for ( size_t i = 0; i < n; i++ )
    {
        *sum += *( *( a + i ) + i );
    }
}

#define N   3

int main(void) 
{
    int a[][N] =
    {
        { 10, 20, 30 },
        { 10, 20, 30 },
        { 10, 20, 30 }      
    };

    long long int sum;

    diagonals2D( &sum, N, a );

    printf( "sum = %lld\n", sum );

    return 0;
}

它的輸出是

sum = 60

那個array+count+count不等於array[count][count] ,這就是你需要實現的目標。
你可以實現它的最好的方法是更清潔的array[count][count]但是如果你想從學習的角度來看堅持指針算法(再次,這對於可讀性和調試來說是不好的)你應該以這種方式訪問​​元素:

(*sum)+=*(*(array+count)+count);

這樣就可以將count添加到基本指針array ,即count行的基址的內存位置。 它是指向指針的指針。

取消引用它將為您提供行的基地址。

count添加到該行的基本指針將為您提供該行的count th元素的地址,並且取消引用它將為您提供該元素的值。

請參閱此處的代碼

作為給定的問題,您應該使用以下代碼。

for(count = 0; count < size; count++)
   sum=*( *( array + count ) + count);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM