上週學習了不少c語言指標和陣列函式的問題,下面是我自己學習的一些總結。
v指標
1.指標到底是什麼?
指標其實也是一種特殊的變數,它與其他普通變數的區別是:
普通變數裡面是資料本身,而指標變數裡面是資料的位址。
例如:
#include int main()
其中,&是取位址的運算子,
*是表示指標運算子 3.
指標作函式引數
函式的引數不僅可以是整型、實型、字元型等資料,還可以是指標型別。作用是將變數的位址傳送到另乙個函式中。 ø
比較經典的例子就是交換兩個數:
#include void swap(int *i,int *j)
int main()
執行結果:
a = 4 b = 3
u在這道程式中,如果將swap函式中的實參改為
a,b,形參改為
i,j,這個程式的最後執行結果就不是
a = 4 b = 3
,而是a = 3 b = 4
。因為按照上述的改法,程式只是簡單將
a,b的值複製給了
i,j。在呼叫
swap
函式後,執行函式體時,i,
j(也就是
a,b)
變數的值的卻是交換了,但是函式最後一步需要釋放空間,儲存在
i,j變數中的交換值也會釋放,那麼最後
a,b的值根本就沒有交換。
4.int x=3, y=0 , *px = &x;
v(*p1)++, *p1++區別?
(*p1)++是
x的內容加1;
*p1++是先求
*p1的值(
x),然後再
p1++
,指向下乙個元素,不再指向x
;(位址加一) v
程式示例:
#include void my_copy(char *i,char *j)
int main()
; char b[10] = ;
printf("please input the string of b:\n");
scanf("%s",b);
my_copy(a,b);
printf("a : %s\n",a);
return 0;
}
執行結果:
please input the string of b:
hello
a : hello
分析:從以上兩個函式可以看出在my_copy函式中,
語句while(*i++ = *j++); 就相當於
*i = *j; i++;j++;
這三句話。語句所實現的功能就是將陣列
b中的,每乙個元素都賦值給b。
v指標函式與陣列 1.
陣列元素和指標
陣列的指標
是指數組的起始位址,
陣列元素的指標
是陣列元素的位址。
例如:用指標來遍歷乙個一維陣列
#include int main()
; int *p;
int i = 0;
p = a;
for(i = 0;i < 5;i++)
printf("\n");
return 0;
}
1.
用指標引用陣列元素
vc語言規定:
如果指標變數p已指向陣列中的乙個元素,則
p+1指向同一陣列中的下乙個元素。
例:p的初值為
&a[0] :
p+i和
a+i都是
a[i]
的位址。
*(p+i)和
*(a+i)
都是p+i
和a+i
所指向的陣列元素,即
a[i].
例如:*(p+5), *(a+5)就是
a[5]. v
指向陣列的指標變數也可以帶下標。p[i]和
*(p+i)
等價。
v引用乙個陣列:
下標法:用a[i]來表示;
指標法:用*(a+i),*(p+i)表示。
v指標和字串 1.
如何使用乙個指標來訪問字串
v程式示例:
#include int main()
; printf("%s\n",*(str+0)); //列印出hello world!
printf("%s\n",*(str+1)); //列印出c language
printf("%c\n",*(*(str+1)+0)); //列印出 c
return 0;
}
v字元陣列和字串的區別
1. 字串指標變數本身是乙個變數,用於存放字串的首位址。而字串本身是存放在以該首位址為首的一塊連續的記憶體空間中並以『
\0』作為串的結束。
字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。
2. 對字串指標方式
char *ps="c language";
可以寫為:
char *ps; ps="c language";
而對陣列方式: static char st=;
不能寫為:
char st[20] ;
st=;
而只能對字元陣列的各元素逐個賦值。
v函式與指標 v
在c語言中,乙個函式總是占用一段
連續的記憶體區,而
函式名就是該函式所佔記憶體區的
首位址。
v把函式的這個首位址(或稱入口位址
)賦予乙個指標變數,使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。我們把這種指向函式的指標變數稱為「函式指標變數」。
v函式指標變數定義的一般形式為:
型別說明符 (*指標變數名
)();
例如:int (*pf)();
表示pf是乙個指向函式入口的指標變數,該函式的返回值
(函式值
)是整型。
v程式示例:
#include typedef void(*func)(char *);
void print(char *s)
int main()
這是我對於學習指標、陣列、函式的一些總結,其中指標和函式的部分下次再發部落格。如果上述小結中有錯誤,希望大家指出。一起學習,一起進步!
c語言 陣列 指標 函式 小結
int f f是乙個函式,返回乙個整型值 int f f是乙個函式,返回乙個整型指標 int f f是乙個函式指標,所指向的函式返回乙個整型值 int f f是乙個函式指標,所指向的函式返回乙個整型指標 int f f是乙個整型陣列 int f f是乙個指標陣列,陣列元素的型別是整型指標 int f...
C語言學習筆記之函式指標與函式指標陣列
指標函式 本質是乙個函式 是乙個返回指標型別的函式 int sum 函式指標 本質是乙個指標 是乙個指向函式的指標 int p int,int sum p 5,6 int sum int a,int b 指標陣列 陣列內儲存的都是指標 int p 2 int a 20 int arr 5 int p...
c語言學習之陣列指標
首先,指標,就相當於乙個位址,指標變數就是拿來存放指標所指向另一變數的位址 定義乙個指標變數需要說明 指標型別,指標變數名。例 int p,a p a 而 陣列,包括陣列型別和陣列名還有陣列長度 陣列長度只能是常量 陣列有一維陣列和多維陣列。例 int a 10 內的必須是常量。那 究竟什麼是陣列指...