陣列和指標(二)

2021-07-25 23:59:21 字數 3091 閱讀 4890

四.函式,陣列和指標

假定要編寫乙個對陣列進行操作的函式,目的是要此函式返回陣列內所有元素的

和,呼叫函式如下:

total=sum(marbles);

那麼函式原型應該為:

int sum(int *ar,int n)

;long answer;

answer = sum(marbles, size);

printf("the total number of marbles is %ld.\n", answer);

printf("the size of marbles is %zd bytes.\n",

sizeof marbles);

return 0;

}int sum(int ar, int n)     

以上程式是乙個使用函式sum()的程式。注意marbles的大小為40位元組,因為陣列

有10個元素,每個元素占用4個位元組,總計40個位元組。而ar是指向陣列首位址的指

針,指標的大小為4位元組。

1.使用指標引數

使用陣列的函式需要知道何時開始和結束陣列。函式sum()使用乙個指標參量來

確定陣列的開始點,使用乙個整形參量來指明陣列元素個數。另外一種方法是使

用兩個指標,第乙個指標指明陣列的起始位置,第二個指標指明陣列的結束位址

。#include

#define size 10

int sump(int * start, int * end);

int main(void)

;long answer;

answer = sump(marbles, marbles + size);

printf("the total number of marbles is %ld.\n", answer);

return 0;

}int sump(int * start, int * end)

return total;

}函式sump()使用第二個指標來控制迴圈次數:

while(start

int data[2] = ;

int moredata[2] = ;

int main(void)

這個程式體現了指標的優先順序。

五.指標操作

c提供了6種基本的指標操作,下面的程式將具體演示這些操作。

#include

int main(void)

;int * ptr1, * ptr2, *ptr3;

ptr1 = urn;         

ptr2 = &urn[2];     

printf("pointer value, dereferenced pointer, pointer address:\n");

printf("ptr1 = %p, *ptr1 =%d, &ptr1 = %p\n",

ptr1, *ptr1, &ptr1);

ptr3 = ptr1 + 4;

printf("\nadding an int to a pointer:\n");

printf("ptr1 + 4 = %p, *(ptr4 + 3) = %d\n",

ptr1 + 4, *(ptr1 + 3));

ptr1++;            

printf("\nvalues after ptr1++:\n");

printf("ptr1 = %p, *ptr1 =%d, &ptr1 = %p\n",

ptr1, *ptr1, &ptr1);

ptr2--;            

printf("\nvalues after --ptr2:\n");

printf("ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n",

ptr2, *ptr2, &ptr2);

--ptr1;            

++ptr2;           

printf("\npointers reset to original values:\n");

printf("ptr1 = %p, ptr2 = %p\n", ptr1, ptr2);

printf("\nsubtracting one pointer from another:\n");

printf("ptr2 = %p, ptr1 = %p, ptr2 - ptr1 = %d\n",

ptr2, ptr1, ptr2 - ptr1);

printf("\nsubtracting an int from a pointer:\n");

printf("ptr3 = %p, ptr3 - 2 = %p\n",

ptr3,  ptr3 - 2);

return 0;

}加給指標,增加指標的值,從指標中減去乙個整數,減小指標的值,求差值,比

較。六.保護陣列內容

指標是直接傳遞位址的,所以增加了程式的效率,但是這也有缺點,它無法保證

原始資料的完整性。對於乙個陣列我們可能在多個函式中運用到它,但是在一些

函式中如果使用了指標就改變了陣列的值,無法再其他函式中運用。所以,我們

必須要保證原始資料的完整性。

我們對形式參量使用const來保證完整性。例如:

int sum(const int ar,int n);//原型

int sum(const int ar,int n);//定義

;printf("the original dip array:\n");

show_array(dip, size); 

mult_array(dip, size, 2.5);

printf("the dip array after calling mult_array():\n");

show_array(dip, size);

return 0;

}void show_array(const double ar, int n)

void mult_array(double ar, int n, double mult)

上面程式中第乙個函式不需要修改陣列,所以使用const,而第二個函式需要修改

陣列,所以不使用const。

二維陣列和指標 和指標陣列,陣列指標

2007 09 12 19 45 7842人閱讀收藏 舉報 二維陣列和指標 用指標表示二維陣列元素。要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。我們知道,乙個二維陣列在計算機中儲存時,是按照先行後列的順序依次儲存的,當把每一行看作乙個整體,即視為乙個大的陣列元素時,這個儲存的二...

指標陣列 陣列指標和二維陣列以及常量指標和指標常量

多維陣列本身是指標陣列,多維陣列首先是陣列,陣列的內容是子陣列的指標陣列的陣列指標 陣列指標就是指向陣列的指標,所以在使用多維陣列時候使用 例如 int a 3 就是指向乙個指向二維陣列的指標。指標陣列就是陣列的內容為指標 例如 char a 2 那麼a 0 和a 1 都是指向char型別的指標。當...

陣列指標和指標陣列的區別 二維陣列和指標的關係

c c程式中,指標和陣列在不少地方可以相互替換著用,讓人產生一種錯覺,以為兩者是等價的。陣列要麼在靜態儲存區被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是 可變 所以...