手機通訊錄(順序表實現)

2021-10-03 15:53:00 字數 2394 閱讀 4012

/*手機通訊錄(順序表)*/

#include

#include

#include

#include

#include

#include

#define maxsize 50

typedef

struct

elemtype;

typedef

struct

sqlist;

void

initlist

(sqlist *

&l)//初始化列表其中*&l為引用型指標

void

displist

(sqlist* l)

//資料顯示

printf

("目前聯絡人總數:%d\n"

, l-

>length)

;printf

("\n");

}bool

listlnsert

(sqlist*

& l,

int i, elemtype e)

//插入資料

bool

listdelete

(sqlist*

& l,

int i, elemtype& e)

//其中*&l為飲用型指標。定義這個函式為bool型,返回結果只有對和錯

l->length--

;//表長度的更改

printf

("length=%d\n\n"

, l-

>length)

;return

true;}

void

menu1()

intlocateelem

(sqlist* l, elemtype e)

//查詢資料

}/*void destroylist(sqlist *l)

*/int

main()

; elemtype e;

menu1()

;printf

("(1)初始化順序表l\n");

initlist

(l);

printf

("(2)依次插入元素\n");

for(

int i =

0; i <

4; i++

)listlnsert

(l, i +

1, s[i]);

displist

(l);

while

(flag ==1)

}return0;

}

思考這個形參為什麼要寫成這兩種形式,即sqlist *l和sqlist * &l的區別。

*l是指標,全稱是指標變數,是乙個用來儲存記憶體位址的變數。在這裡是乙個指向順序表,儲存順序表的位址的變數。

* &l是指標型別的引用,引用(reference)是c++對c語言的重要擴充。引用就是原變數的另外乙個名稱(別名),引用變數本身沒有自己的實際儲存空間,對引用變數的操作,就是在操作原變數。這裡的* &l代表原指標。

這兩個有著乙個共同點,都指向順序表 l ,如果在函式中修改l 的內容,都影響到 l 的內容。

不同點則是,在函式中修改指標本身所指向的位址,*l 不會發生改變,而* &l會發生改變。
若要改變形參中的內容並且使用它則需要用引用,如果不需要改變子函式體中形參旳值,則不需要用引用。

首先,* &l是引用型別的指標,代表的是原指標,我們在函式中對指標的操作,都是直接對原指標的操作,無論是指標的內容,還是指標指向的位址,都會發生改變。

那麼,*l為什麼在函式中會改變不了所指向的位址呢?

其實,這裡我們要延伸到函式形式引數和實際引數的很基礎,也很重要的知識點了。

形參出現在函式定義中,在整個函式體內都可以使用。實參出現在主調函式中,進入被調函式後,實參也不能使用。在函式呼叫的時候,主函式把實參的值傳送給被調函式的形參,從而實現資料的傳送。

但是,在這個函式呼叫的過程中,資料傳送是單向的,即資料只能由實參傳到形參,而形參不會傳回實參。也就是說,我們在函式中改變形參的值,實參的值是不會發生改變的,這就是函式呼叫中的單向值傳遞。

那麼,回到我們的 *l 來,*l其實就是乙個變數,在這裡是乙個形式引數。形式引數在函式中其實是對實參的拷貝,也就是說,函式中形參其實是另乙個變數,乙個複製原變數的新變數,有不同於原變數的記憶體空間,存在於函式中,函式呼叫結束,即刻釋放記憶體空間。

也就是說,我們在函式中改變 *l 所指向的位址,不是在對原變數進行改變,而是對原變數的乙個複製體進行改變,改變了複製體,卻沒有改變本體。

所以,在函式中 *l 不能改變所指向的位址。

獲取手機通訊錄

在公司裡寫了一段上傳使用者通訊錄的 寫下來,以便以後查閱 獲取手機裡的通訊錄 獲取通訊錄 param context return 返回包含使用者名稱,與號碼的arraylist public arraylistgetcontact context context phones.close alla...

獲取手機通訊錄

手機聯絡人,通過乙個服務想歪提供資料 所有手機聯絡人的資料我們會在服務裡面查詢,然後再返回給activity 首先,我們建立出 contentresolver contentresolver 的建立時通過上下文來獲取的 contentresolver cr context.getcontentres...

獲取手機通訊錄 1 1(取出通訊錄資料)

獲取手機通訊錄在開發中經常會用到,這邊記下日後檢視。1 獲取手機通訊錄是要取得系統許可權的將下面許可權新增到androidmanifest檔案中 我經常在許可權問題上吃虧,經常 寫好了,也沒有錯,就是出不來效果,所以以後需求中用到許可權的,先在配置檔案中把許可權新增進去 2 聯絡歷史的bean ca...