伊莉討論區

標題: 陣列的元素---設為同一值 [打印本頁]

作者: LWJ0107    時間: 2013-2-28 03:12 PM     標題: 陣列的元素---設為同一值

[attach]87935327[/attach]

作者: snowflying    時間: 2013-2-28 04:52 PM

本帖最後由 snowflying 於 2013-2-28 04:53 PM 編輯

http://www07.eyny.com/forum.php? ... page=1#pid231179340

我記得這問題在這個版至少看過兩篇 另一篇一時找不到


作者: LWJ0107    時間: 2013-2-28 05:11 PM

snowflying 發表於 2013-2-28 04:52 PM
http://www07.eyny.com/forum.php? ... page=1#pid231179340

我記得這問題在這個版至少看過兩篇 另一篇一 ...

我還是不太懂= =
我想要讓陣列裡面的4個元素都是3
就要int score[4]={3,3,3,3}
這樣做嗎??
有沒有其他方法
可以跟我解釋一下嗎??
謝謝!!
(我剛入門,很不好意思~~)

作者: snowflying    時間: 2013-2-28 07:54 PM

本帖最後由 snowflying 於 2013-2-28 07:58 PM 編輯
LWJ0107 發表於 2013-2-28 05:11 PM
我還是不太懂= =
我想要讓陣列裡面的4個元素都是3
就要int score[4]={3,3,3,3}


可以 int score[4]={3,3,3,3}
或者宣告完後,再把他們的值初始化
看是要用迴圈之類的去跑 還是其他方式

我是不確定是不是剩餘的預設以 int() 初始化
不過我想他應該也不會讓你去改 int()

另外一種方式(in C++):
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;

  4. class MyInt
  5. {
  6.     public:
  7.         MyInt(int i = 3){value = i;}
  8.         int value;
  9.         operator int(){return value;}
  10. };

  11. void f(int i)
  12. {
  13.     cout << i << '\n';
  14. }

  15. int main()
  16. {
  17.     MyInt arr[4];
  18.     f( arr[0]);
  19.     f( arr[1]);
  20.     f( arr[2]);
  21.     f( arr[3]);
  22.     system("pause"); // If you need this line.
  23.     return 0;
  24. }
複製代碼
可以看到全部值為 3
如果使用 MyInt arr[4] = {0};
那麼就會只有第一個為 0 , 其餘為 3
這只是一種替代方式


作者: trtc008056    時間: 2013-3-3 11:07 PM

本帖最後由 trtc008056 於 2013-3-3 11:15 PM 編輯

有一個東西叫做 memset 的樣子,可以去找找看

作者: snowflying    時間: 2013-3-4 12:10 AM

trtc008056 發表於 2013-3-3 11:07 PM
有一個東西叫做 memset 的樣子,可以去找找看

memset 是以 byte 為單位
以4-byte 的 int 來說 要設成的值不見得會是每個byte 相同
這基本上比較適合在 char 和 bool 等 (以 1-byte 而言)
作者: ykshieh    時間: 2013-3-4 04:14 PM

本帖最後由 ykshieh 於 2013-3-4 09:04 PM 編輯

如果宣告int而用memset初始化
例如:
int score[4];
memset( score, 1, sizeof( score ) );

此時,對陣列中的每一個的動作會變成(以二進位表示)
score[0] = 00000001 00000001 00000001 00000001
(因為電腦會對你"每一個byte"都設為1的動作,int有4 bytes)
你會得到score[0] = 16843009
所以只要單位大於1byte的都不太適合用memset做初始為0以外的動作

應該使用迴圈將值初始化,或是剛開始就給予值{3,3,3,3}。
不然... 全部砍掉重練的方法,就是自己用組語寫一個可以對4 bytes動作的副程式。

作者: erobyi    時間: 2013-3-4 05:28 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: kaworucloud    時間: 2013-3-5 10:28 AM

erobyi 發表於 2013-3-4 05:28 PM
試下這個行否

`[first ... last] = value' 這種寫法是 GNU extension
只有 GNU 系的 compiler 才支援,並且是 C only
作者: erobyi    時間: 2013-3-5 12:18 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: erobyi    時間: 2013-3-5 12:50 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chimark777    時間: 2013-3-5 08:49 PM

本帖最後由 chimark777 於 2013-3-5 08:54 PM 編輯

int score[4]={3,3,3,3};
same as other data types
for example
char *strlist[3]={"123","123","123"};
double data[3]={123.0,123.0,123.0};

作者: snowflying    時間: 2013-3-5 09:35 PM

erobyi 發表於 2013-3-5 12:18 PM
呵,我不清楚。。。只是突然想試試看,若有幫助的話很高興
因為電腦本身並無裝任何compiler,無法 ...

門路很多呢
C++ STL部分也提供了 fill  和  fill_n
不過我是覺得先建議他們用迴圈
等之後學多了  說不定就有自己的想法處理囉




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!