一 分析
討論指標陣列要從三個層面來考慮:
1)指標陣列本身是什麼
2)指標陣列作為引數時的表現
3)指標陣列作為返回值時的表現
二 指標陣列是什麼
1)指標陣列--指標的集合
陣列是若干元素的集合,那麼指標陣列就是若干個指標的集合,這個集合內的所有元素都是獨立的指標。
2)定義乙個指標陣列
char* schar[10];
這裡定義了乙個指標陣列,『int*』表明其資料型別為int型指標,『[10]』表明這個集合有10個指標。
3)試用
#include #include輸出:#include
#include
#include
intmain()
for(i = 0;i<10;i++)
for(i = 0;i<10;i++)
return0;
}
1234567890在上面的例子中,我們可以簡單的將指標陣列當做乙個指標的集合,陣列內所有元素都是獨立的指標。1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
三 指標陣列作為引數
1)常規應用
#include #include上面的**中,我們在主函式中為指標陣列分配了記憶體和值,將其作為引數傳遞給dataprint函式,在dataprint函式中將指標陣列的值列印出來,如下:#include
#include
#include
intmain()
dataprint(arglist);
for(i = 0;i<10;i++)
return0;
}
int dataprint(char* arglist[10
])}
12345678902)指標陣列中每乙個元素都是指標1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
1234567890
指標陣列中的每乙個元素都能當做單獨的指標來使用,其特性我們就不多說了。
3)指標陣列作為引數傳遞時,傳遞的是位址
對於非陣列引數,在作為引數進行傳遞時是將其值傳遞給了函式,而不是該變數本身,例如:
#include #include上面的**中,b的值一開始由a變數傳遞過來為1,然後在fun函式中被重新賦值為3.整個過程中,a變數的值都是1。#include
#include
#include
intmain()
int fun(int
b)
而陣列作為引數進行傳遞時,考慮到陣列內資料量可能很大,所以不會將陣列的值傳遞下去,而是傳遞該陣列的首位址,這樣的傳遞方式就會引數一些有趣的現象。不過在此之前,我們先來看看陣列以及指標陣列是怎麼組成的。
a)定義乙個陣列
b)將這個陣列作為引數傳遞
可以看到,b陣列內所有元素在記憶體中的位址與a陣列一致,那麼我們改變b陣列的值也會間接地改變了a陣列的值
#include #include輸出#include
#include
#include
intmain()
; printf(
"a[0]:%u\n
",a[0
]); fun(a);
printf(
"a[0]:%u\n
",a[0
]);
return0;
}int fun(int b[10
])
a[0]:0可以看到,a[0]的值在呼叫fun函式後發生了改變,這是因為陣列將位址而不是值傳遞給了fun函式,在這種情況下,我們可以簡單的認為b=a。a[0]:10
c)定義乙個指標陣列
#include #include此時arglist在記憶體中表現為#include
#include
#include
intmain()
}
d)將指標陣列作為引數傳遞
#include #include在上面的**中,我們在datachange函式內執行了arglist[i]++,那麼這一語句具體產生了什麼效果?arglist[i]表明的是arglist的第i個元素,其本質是乙個指標,該值加一表明該指標元素指向的位址值加一,所以現在arglist的記憶體表現為:#include
#include
#include
intmain()
datachange(arglist);
for(i = 0;i<10;i++)
return0;
}
int datachange(char* arglist[10
])}
arglist[0]++使得abc00中的xx00值加一,跳過了0值,所以最後輸出為
234567890234567890
234567890
234567890
234567890
234567890
234567890
234567890
234567890
234567890
C語言實驗 陣列逆序
c語言實驗 陣列逆序 time limit 1000ms memory limit 65536kb problem description 有n個整數,使其最後m個數變成最前面的m個數,其他各數順序向後移m m n 100 個位置。input 輸入資料有2行,第一行的第乙個數為n,後面是n個整數,第...
C語言實驗 陣列逆序
time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 有n個整數,使其最後m個數變成最前面的m個數,其他各數順序向後移m m n 100 個位置。input 輸入資料有2行,第一行...
C語言實驗 排列
c語言實驗 排列 time limit 1000ms memory limit 65536kb problem description 有4個互不相同的數字,請按序輸出由其中三個不重複數字組成的排列。input 4個整數。output 所有排列,輸出順序見樣例。example input 1 2 3...