。
我錯過了今天的講座,所以我不知道講座幻燈片中的這個問題是怎么回事。我的直覺告訴我應該是C和N×M矩陣(行×列),但我不太確定。 希望得到任何幫助
。uj5u.com熱心網友回復:
它是b,和MxN的雙數陣列。
typedef double X_t[N] 。
將X_t定義為一個N雙數的陣列。
當你做一個這樣的陣列時,每個X_t是一個行。所以
X_t A[M];
創建這個的M行。
uj5u.com熱心網友回復:
double X_t[N]表示一個具有N元素的double型別的陣列的型別。
X_t A[M];是一個具有M元素的陣列的宣告,其型別為double[N]。
所以這個宣告等同于
double A[M][N]。
下面是一個示范性程式。
#include <stdio.h>
int main(void)
{
enum { M = 2, N = 5 };
typedef double X_t[N] 。
printf( "sizeof( X_t ) = %zu
", sizeof( X_t ) ) 。
putchar( '
' )。
X_t A[M]。
printf( "sizeof( A ) = %zu
", sizeof( A ) ) 。
printf( "sizeof( A[0] ) = %zu
", sizeof( A[0] ) ) 。
printf( "sizeof( A ) / sizeof( A[0] ) = %zu
", sizeof( A ) / sizeof( A[0] ) ) 。
return 0;
程式輸出是
sizeof( X_t ) = 40.
sizeof( A )=80
sizeof( A[0] ) = 40
sizeof( A ) / sizeof( A[0] ) = 2。
因此可以看出,陣列A有兩個元素,大小為40位元組,相當于N * sizeof( double )。
uj5u.com熱心網友回復:
下面是思考的方式:
X_t A[M];
A是一個包含something的M元素陣列,這個something就是X_t。 所以馬上就排除了c這個可能的答案。
現在你看一下這個問題。
現在你來看看X_t的定義。 目前,假裝typedef不在那里:
double X_t[N]。
這宣告了X_t是一個N元素的double陣列。 當我們添加typedef關鍵字時:
typedef double X_t[N] 。
這意味著X_t是 "N元素的double陣列 "型別的一個別名。 所以,如果A是一個X_t的M元素陣列,而X_t是"double的N元素陣列 "的別名,那么A的型別就是"double的N元素陣列的M元素陣列",或者"double的MxN陣列。" 這就相當于寫
double A[M][N]。
由于[]運算子是后綴,無論何時,當你用一個陣列typedef與其 "裸體 "等價物替換時,你會把替換后的陣列大小放在右邊。 假設有以下型別定義:
typedef double A_type[M]; //A_type是一個雙數的陣列。
typedef A_type B_type[N]; //B_type是A_type的一個陣列。
typedef B_type C_type[O]; // C_type是B_type的一個陣列。
還有這個宣告
C_type x;
我們想知道x的實際型別是什么,所以我們做了以下作業:
x是一個型別為C_type的物件。 C_type是"B_type的O元素陣列 "型別的一個型別定義名稱,所以我們用B_type [O]替換C_type。 因為[]運算子是后綴,所以[O]會進入宣告者的最右邊:B_type x[O]。
x是一個型別為B_type的O元素陣列。 B_type是"A_type的N元素陣列 "型別的一個型別定義名稱。 和上一步一樣,我們用A_type [N]替換B_type,并將[N]放在宣告者的最右邊:A_type x[O][N]。
x是一個由A_type的N元素陣列組成的O元素陣列。 A_type是"double的M元素陣列 "的型別定義名稱。 我們用double [M]替換A_type,并且再次將[M]放到宣告器的最右邊,留給我們:double x[O][N][M] 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/322464.html
標籤:
上一篇:JavaScript-我如何在一個單行代碼中使用物件字面和括號符號,動態地將一個新的鍵值對分配給一個物件,傳播語法?

