- 陣列的定義:
陣列的型態 陣列名稱 [ 陣列長度 ]
範例:
int num[10];
float realnum[10];
char eng[10];
- 資料存入陣列的方式:
- 使用指派(設定給)敘述:
- 宣告兼設值
int num[5] = {1, 2, 3, 4, 5};
float realnum[3] = {3.14, 1.414,
1.618};
char eng[6] = {'a', 'b', 'c', 'd', 'e'};
- 範例:
#include
<stdio.h>
#include
<stdlib.h>
main()
{
char
string1[] =
"Superman";
char
string2[] =
{'S','u','p','e','r','m','a','n','\0'};
char
string3[] =
{83,117,112,101,114,109,97,110,0};
printf("Array
string1= %s
\n",string1);
printf("Array
string2= %s
\n",string2);
printf("Array
string3= %s
\n",string3);
}
-
練習:(利用上述範例修改)
請設定三個陣列,將你的學號、英文名字、手機號碼存入三個陣列,並
輸出至螢幕顯示!
int sid[]=...;
char myname[]=...;
int phone[]=...;
printf...
- 透過迴圈設定(常用)
範例:將 num[100]
所有元素設為 0,程式碼如下:
float num[100];
for(i=0; i<100; i=i+1){
num[i] = 0;
}
- 使用 memset 函式初始化
memset( 陣列名, 0, sizeof( 陣列 ))
可以把一整塊的記憶體填上相同的值,
因為陣列名稱都是指向第一個元素位址。
需 #include
<mem.h>
方可使用。
或使用相關函數 memcpy(目的,
來源, 區塊大小);
範例:
int array[20];
memset(array, 0, 20 *sizeof(int));
上述是在執行程式前,已經確定陣列大小的方式,
但如果是要在執行階段,才決定要陣列的大小呢?
稱為動態空間配置(或動態記憶體分配),常會使用以下函數:
void* malloc( sizeof(datatype) );
//在heap區配置相關資料型別需要的空間大小.
void* calloc( number, sizeof(datatype)); //將初始化記憶體內容設定為0.
void* free( *ptr ); //釋放malloc,或calloc要到的空間,
但不能重複釋放!
void* realloc( *ptr, size_t size ) //試著調整之前malloc或calloc指向區塊的大小.
有興趣的同學,可自行上網查詢相關函數使用...
- 陣列初始化為0
int array[100]={0};
int array[100][100]={0};
PS:以大括弧方式初始化,編譯器會如對static變數一樣,自動把沒初始的數值補0!
要特別注意,括號裡那個0,不是初始化的數值喔!(Will Wang,
2010)
- 陣列名的指標性質(利用指標傳遞存取陣列)
#include <stdio.h>
main()
{
int a[5];
a[2]=7;
printf("a[2]=%d\n",
a[2] );
printf("*(a+2)=%d\n",
*(a+2) );
printf("*(2+a)=%d\n",
*(2+a) );
}
執行上述程式碼,觀察執行結果為何?
- 陣列在函數的傳遞方式:
範例練習:
#include <stdio.h>
#include <stdlib.h>
array_print(int v[10]) /* 試將下列藍色陣列印出的功能,寫成函數
替代
*/
{
//...
}
main()
{
int v[10];
int i;
for(i=0; i<=10; i++){ /* 陣列
指派值
*/
v[i]=(i+1)*10;
}
for(i=0; i<=10; i++){ /* 利用迴圈印出陣列
*/
printf("v[%d]=%d\n", i,
v[i]);
}
}
試將上述範例完成,並執行觀察結果。
|
|