查看完整版本: 關於struct陣列
頁: [1]

st474ddr 發表於 2016-5-6 10:30 PM

關於struct陣列

如果我定義一個
struct A{
int x;
int y;
} a;
那究竟這 a會是一個一維陣列還是二維的呢?
畢竟他存了兩個值
小弟有此一問
<div></div>

st474ddr 發表於 2016-5-6 10:43 PM

因為我碰到這樣的問題
(我對struct還非常不熟練)
code提供:
#include <stdio.h>
typedef struct Shape
{
    int height;
    int width;
} shape;

main()
{

    int n, num, i, sum, j;
    shape s;
    scanf("%d", &num);
    while(num--)
    {
        scanf("%d", &n);
        for(i = 0; i < n; i++)
            scanf("%d%d", &s.height, &s.width);
        sum = 0;
        for(i = 0; i < n; i++)
        {
            if(s.width = s.height)
                sum += s.height;
            else
                sum = sum + s.height + s.width;
        }
        輸出("%d", sum);
    }
}
我的height width 明明就輸入不同
可是為什麼進到迴圈之後
兩個值又會變的一樣呢?...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

snowflying 發表於 2016-5-7 12:25 AM

一維 index 從 0 到 99
想像成 x = 0, x = 1, ... , x = 99 對應到 a ~ a
二維的話,是像這樣
a
想像成一個平面,x = 0, y = 0 對應到 a ...


if(s.width = s.height)

判斷等於是 == 不是 =
= 是指定值給他
會變成把 s.height 的值給 s.width
然後判斷 s.width 是否為 0 值

st474ddr 發表於 2016-5-10 06:31 PM

snowflying 發表於 2016-5-7 12:25 AM static/image/common/back.gif
一維 index 從 0 到 99
想像成 x = 0, x = 1, ... , x = 99 對應到 a ~ a
二維的話,是像這樣


謝謝snowflying大大
但是關於第一個問題好像沒有回答到QQ
我的意思是
struct開一維陣列時
存兩個變數
那他到底是屬於一維陣列?
還是二維(兩變數)...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

snowflying 發表於 2016-5-10 10:04 PM

st474ddr 發表於 2016-5-10 06:31 PM static/image/common/back.gif
謝謝snowflying大大
但是關於第一個問題好像沒有回答到QQ
我的意思是


一般來說,維度是指陣列的,不會去計算裡面的成員
所以是一維陣列,每一個都擁有兩個成員
<br><br><br><br><br><div></div>

ILOVEYOUEVER 發表於 2016-5-15 07:54 AM

你就看成一為陣列就可以了

happyfeet 發表於 2016-6-12 04:46 PM

這樣宣告為一維的結構陣列,代表你有100個結構,每個結構裡有2個成員,
例如:
struct 麵包{麵粉, 糖} ary;所以現在我有100個麵包,每個麵包的材料都有麵粉和糖
不知道我這樣形容,你了解了嗎?

hst326 發表於 2016-6-18 02:17 PM

一維陣列

只是這陣列裡所使用的memory size 較大一點

以這2種struct為例:

struct A {
int a; // 佔 32bit (8 bytes)
};

struct B {
char b; // 佔 8bits (1 byte)
int c; // 佔 32bit (8 bytes)
};

在實際使用到的 memory 上,
A是用了 8bytes,
B是用了 1byte +8 bytes = 9 bytes ,
但OS為32/64 bit的話, 就會再做對齊(alignment)的動作,
所以 B 實際是用了 9 bytes --- alignment --> 16bytes
頁: [1]