C語言 實驗室 指標陣列

2022-02-05 23:09:00 字數 3600 閱讀 8560

一 分析

討論指標陣列要從三個層面來考慮:

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 

#include

#include

#include

intmain()

dataprint(arglist);

for(i = 0;i<10;i++)

return0;

}

int dataprint(char* arglist[10

])}

上面的**中,我們在主函式中為指標陣列分配了記憶體和值,將其作為引數傳遞給dataprint函式,在dataprint函式中將指標陣列的值列印出來,如下:

1234567890

1234567890

1234567890

1234567890

1234567890

1234567890

1234567890

1234567890

1234567890

1234567890

2)指標陣列中每乙個元素都是指標

指標陣列中的每乙個元素都能當做單獨的指標來使用,其特性我們就不多說了。

3)指標陣列作為引數傳遞時,傳遞的是位址

對於非陣列引數,在作為引數進行傳遞時是將其值傳遞給了函式,而不是該變數本身,例如:

#include #include 

#include

#include

#include

intmain()

int fun(int

b)

上面的**中,b的值一開始由a變數傳遞過來為1,然後在fun函式中被重新賦值為3.整個過程中,a變數的值都是1。

而陣列作為引數進行傳遞時,考慮到陣列內資料量可能很大,所以不會將陣列的值傳遞下去,而是傳遞該陣列的首位址,這樣的傳遞方式就會引數一些有趣的現象。不過在此之前,我們先來看看陣列以及指標陣列是怎麼組成的。

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]:10

可以看到,a[0]的值在呼叫fun函式後發生了改變,這是因為陣列將位址而不是值傳遞給了fun函式,在這種情況下,我們可以簡單的認為b=a。

c)定義乙個指標陣列

#include #include 

#include

#include

#include

intmain()

}

此時arglist在記憶體中表現為

d)將指標陣列作為引數傳遞

#include #include 

#include

#include

#include

intmain()

datachange(arglist);

for(i = 0;i<10;i++)

return0;

}

int datachange(char* arglist[10

])}

在上面的**中,我們在datachange函式內執行了arglist[i]++,那麼這一語句具體產生了什麼效果?arglist[i]表明的是arglist的第i個元素,其本質是乙個指標,該值加一表明該指標元素指向的位址值加一,所以現在arglist的記憶體表現為:

arglist[0]++使得abc00中的xx00值加一,跳過了0值,所以最後輸出為

234567890

234567890

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...