C指針具有很重要的作用,就不多說了。
其中學(xué)習(xí)指針首先要知道兩個(gè)符號 * 和&。
在類型后面和變量名前面添加* ,代表這是一個(gè)指針對象,如int * k,這代表一個(gè)指向int類型的指針k。
而&則是取地址符,在c中如過有int k= 10;那么使用&k,則是取出i在計(jì)算機(jī)中的地址,而指針正是指向這個(gè)地址的。
所以int * p = &k;這個(gè)表達(dá)式意思為int型指針p指向i的地址,如果要取出這個(gè)地址中所保存的值,那么直接使用 * p就可以了。
這里要區(qū)別一件事,就是int * p是申明這是一個(gè)指向int型的指針,而*p則是取出這個(gè)指針?biāo)笇ο蟮闹怠?br>
也就是:
int k=10;
int * p = &k; // 指針p指向k
printf("獲取指針p里面保存的值 %d \n", *p); // 打印出指針p中所保存的值。
指針與數(shù)組
指針與數(shù)組又是一個(gè)比較難的地方。
一個(gè)數(shù)組的地址是其第一個(gè)元素的地址,因此在c中書寫函數(shù)原型的時(shí)候,以下四種寫法是等價(jià)的:
int sum(int *ar, int n);
int sum(int *, int n);
int sum(int ar[], int n);
int sum(int [], int);
當(dāng)然了,在函數(shù)原型中書寫時(shí)可以省略參數(shù)名,但是在函數(shù)定義中是不能省略的,大家要注意。
以下是數(shù)組與指針的一些簡單使用:
char ch[] = "I'am special";
char * pr = ch;
printf("address of ch %p \n", ch); //查看ch的地址,數(shù)組的地址即其第一個(gè)元素的地址
printf("address of pr %p \n", pr); // 指針的值為ch的地址:
printf("address of pr %c \n", *pr); //取出ch第一個(gè)元素的值, %c指的是獲取單字符
ch[5] = 'q'; // 修改ch第5個(gè)元素s為p
printf("%c \n",ch[5] ); // 獲取ch第五個(gè)元素
printf("%c \n",*(pr+ 5)); // 通過指針獲取ch第五個(gè)元素
printf("%p \n",&ch[5] );// 獲取ch第五個(gè)元素地址
printf("%p \n", pr+5);// 通過指針獲取ch第五個(gè)元素地址