陣列、字串是兩種最基本的資料結構,使用連續記憶體分別存數字和字元,並按照順序儲存。
str[indexofnew --
]= str[indexoforiginal]
;
str[indexofnew]
= str[indexoforiginal]
;indexofnew --
;
bool duplicate
(int numbers,
int length,
int* duplication)..
.int numbers;
bool validinput =
duplicate
(numbers, lengthnumbers,
&duplication)
;
2.一維陣列,形參為同資料型別指標,實參傳陣列名
void
test
(const
char
* testname,
int* numbers,
int length,
int* duplications,
int duplength)..
.int numbers=
;test
("test1"
, numbers,
sizeof
(numbers)
/sizeof
(int
), duplications,
sizeof
(duplications)
/sizeof
(int))
;
3.二維陣列,形參為同資料型別指標,實參傳將陣列名強制型別轉化成的同類指標
void
test
(char
* testname,
int* matrix,
int rows,
int columns,
int number, bool expected)..
.int matrix[
4]=,
,,};
test
("test1",(
int*
)matrix,4,
4,7, true)
;
4.二維陣列,形參為給定第二維長度的二維陣列,實參為陣列名
void
test
(int matrix[
4],int rows,
int cols,
int num)..
.int matrix[
4]=,
,,};
test
(matrix,4,
4,7)
;
5.二維陣列,形參為指向陣列的指標(陣列指標)並給出陣列長度,實參為陣列名
void
test
(int
(*matrix)[4
],int rows,
int cols,
int num)
// 陣列指標..
.int matrix[
4]=,
,,};
test
(matrix,4,
4,7)
;
6.二維陣列,形參為指標的指標,實參必須為指標陣列(元素為指標的陣列)。在函式中使用傳參過來的二維陣列(指標)進行陣列取值的時候不能使用(array[ i ][ j ])這種形式來取值。應該將二維陣列看成乙個一維陣列,使用array[i * j + j]這種形式來進行取值。
void
test
(int
**matrix,
int rows,
int cols,
int num)..
.int matrix[
4]=,
,,};
int* array[4]
;// 指標陣列
array[0]
= matrix[0]
;array[1]
= matrix[1]
;array[2]
= matrix[2]
;array[4]
= matrix[4]
;test
(array,4,
4,7)
;
附:
陣列指標(也稱行指標)
定義 int (*p)[n];
()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。
如要將二維陣列賦給一指標,應這樣賦值:
int a[3][4];
int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。
p=a; //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]
p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]
所以陣列指標也稱指向一維陣列的指標,亦稱行指標。
指標陣列
定義 int p[n];
優先順序高,先與p結合成為乙個陣列,再由int說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]…p[n-1],而且它們分別是指標變數可以用來存放變數位址。但可以這樣 p=a; 這裡p表示指標陣列第乙個元素的值,a的首位址的值。
如要將二維陣列賦給一指標陣列:
int *p[3];
int a[3][4];
p++; //該語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標
for(i=0;i<3;i++)
p[i]=a[i]
這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]
所以要分別賦值。
劍指offer 面試題3(p39)陣列中重複的數字
tips 用下標定位元素,利用這一特性可交換資料到與下標對應的位置;與二分查詢結合考察,熟悉二分查詢的寫法。
int start =1;
// attention
int end = length -1;
while
(end >= start)
劍指offer 面試題4(p44)二維陣列中的查詢
c/c++中每個字串以字元』\0』作為結尾,因此字串有乙個額外字元,不留神容易造成字串越界。
c/c++把常量字串放到乙個單獨的記憶體區域,當幾個指標賦值給相同的常量字串時,他們實際上會指向相同的記憶體位址。例如,
char
* st3 =
"hello world"
;char
* st4 =
"hello world"
;
st3和st4中所存位址相同。並且在上述字元指標的char*複製字串常量時,不可用指標st3,st4改變該常量的值。
char
* testname;
printf
("%s begins: "
, testname)
;// 而不是 *testname
字元陣列、字元指標的字串會有要考慮記憶體釋放是否足夠、字串
長度等的問題
,因此使用時可以考慮使用stl庫中的string資料結構 字串
1 字串 include string.h include stdio.h include stdlib.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define ma...
資料結構 字串
字串是由0個或多個字元構成的序列,可記為s a1a2a3 an 其中ai可以是字母,也可是數字或者其他字元,零個字元的串稱為空串。而字串的順序結構就是用簡單的char型別陣列來儲存沒什麼好說的,下面介紹一下bf演算法與kmp演算法 bf演算法就是比較平常的雙重迴圈,如果匹配成功打斷迴圈,否則子串的比...
資料結構 字串
靜態陣列實現 順序儲存 串的順序儲存 define maxlen 255 預定義最大串長為255 typedef struct 靜態陣列實現 順序儲存 sstring 動態陣列實現 堆分配儲存 typedef struct 動態陣列實現 堆分配儲存 hstring 初始化void inithstri...