四.函式,陣列和指標
假定要編寫乙個對陣列進行操作的函式,目的是要此函式返回陣列內所有元素的
和,呼叫函式如下:
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程式中,指標和陣列在不少地方可以相互替換著用,讓人產生一種錯覺,以為兩者是等價的。陣列要麼在靜態儲存區被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是 可變 所以...