用於儲存記憶體位址的變數,稱為指標變數,簡稱指標
語法格式:
指標指向的資料型別 * 指標名稱;
int i = 100;
int * p;
p = &i ; //i的位址儲存到p中
//此時:對於p來說,有三個相關的表示式,如下;
*p ——— 指標指向的資料
p ——— 指標的空間
&p ——— 指標的空間位址
//注意:左值和右值型別必須保持一致
int *p ;
char c = 10 ;
float f = 3.4 ;
int i = 123 ;
p = &c ; //錯誤
p = &f ;// 錯誤
p = &i ;//正確
表示資料在記憶體空間中的位址,該位址對應的值為空間的第乙個位元組的位址
當指標指向某個資料,可以通過取值運算來表示該資料
例如:int i = 10 ;
int *p = &i ;
*p —— 表示i
int
main
(void
)
結果:
&i =
0xbfc51a88
p =0xbfc51a88p+1
=0xbfc51a8c
//加4個位元組--1*sizeof(int) 或 1*sizeof(i) 或 1*sizeof(*p)p+3
=0xbfc51a94
//加12個位元組 ---- 3 * sizeof(int) 或 3*sizeof(i) 或 3*sizeof(*p)
int
main
(void
)
結果:
&i =
0xbf8f11c8
p =0xbf8f11c8p-1
=0xbf8f11c4
//減4個位元組p-3
=0xbf8f11bc
//減12個位元組
//同型別指標可以相減,相減結果為整數
例如:
int
main
(void);
int*p1,
*p2;
p1 =
&a[9];
p2 =
&a[4];
printf
("p1 = %p\n"
,p1)
;printf
("p2 = %p\n"
,p2)
;printf
("p1 - p2 = %d\n"
,p1 - p2)
;return0;
}
結果:
p1 =
0xbffdc4e4
p2 =
0xbffdc4d0
p1 - p2 =
5//表示兩個指標變數中的位址之間有多少個指標指向的資料長度的空間
表示兩個位址的高低比較
int a = 10 , b = 20 ;
//用法一
const
int* p1 =
&a; 或 int
const
* p1 =
&a;*p1 =
100;
//錯誤,在定義指標時,加了const,所以*p1為唯讀不能賦值
a =11
;//正確,不影響a
//用法二
int
*const p2 =
&a;*p2 =
100;
p2 =
&b;//p不能賦值,因為在定義時加const,所以,p為唯讀
printf
("a = %d\n"
,a);
printf
("*p = %d\n"
,*p)
;
//用法三
在定義指標時,把第一種用法和第二種用法合起來,例如:
const int * const p = &a;
//這時, * p和p都不能賦值
//陣列名稱多重含義
int a[5] ;
//陣列名a——表示陣列在記憶體空間的名稱,sizeof(a)
//陣列名a——表示陣列的第乙個元素位址,而且時位址常量,a等價於 &a[0]
例如:
int
main
(void);
int i;
printf("sizeof(a) = %d\n",sizeof(a));
printf("&a[0] = %p\n",&a[0]);
printf("a = %p\n",a);
for(i = 0; i < 5; i++)
printf("%d,%d\n",a[i],*(a+i)); //公式: a[i] 等價於 *(a+i)
*/int b[2]
[3]=
,};int i,j;
for(i =
0; i <
2; i++
)for
(j =
0; j <
3; j++
)printf
("%d\t%d\t%d\n"
,b[i]
[j],
*(b[i]
+j),*(
*(b+i)
+j))
;return0;
}
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...
c語言指標
編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...