[英]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.