一、指標簡介(任何指標變數在記憶體中佔八個位元組的儲存空間)
1.定義指標變數(格式):變數型別 *變數名;--定義乙個指向整形變數的指標 int *p;
//指標將變數a的位址賦給指標變數p
//定義乙個int型別的陣列
int ages[2] = ;//將陣列的位址賦給指標變數p
p = ages; 或者 p = &ages;
3.訪問:
*p = 11;
二、指標注意點:
1.任何指標變數都占用8個位元組的儲存空間
2.指標型別只能指向對應型別的變數,比如int *p只能指向int型別的資料,不然會出錯
float *p1 ; p1 = 100 ;--這是錯誤寫法
4.float f =1.5f ;
float *p = &f ;//這一句**其實做了2件事--1)定義了指標變數p;2)讓指標變數p指向了f
*p = 5.6f ;
三、指標和陣列
利用指標遍歷陣列元素,方法一:這種遍歷方式,指標的值從未變過
1利用指標遍歷陣列元素,方法二:這種遍歷方式,指標的值一直在改變void
test3()2;
46int *p =ages;78
//p + 1;
//&ages[1]9//
p + 2;
//&ages[2]
10//
p + 3;
//&ages[3]
11//
p + i;
//&ages[i]
1213
for (int i = 0; i<4; i++)
1418
19//
這種遍歷方式,指標的值從未變過
20 printf("
%d\n
", *p);
2122 }
1四、詳解指標的p+1void
test5()2;
45int *p =ages;67
for (int i = 0; i<4; i++)813
14//
這種遍歷方式,指標的值一直在改變
15 }
1.指標變數的+1並不是基本資料型別中簡單的+1;
2.p+1究竟是增加了多少,取決於指標的型別;
指標的p+1跟指標所指向的資料型別有關,如下:
char * 1
int * 4
double * 8
long * 8
五、指標與字串:重點--char *name = "hello" ;-->不可改變(可以理解為字串常量) char name = "hello" ;-->可以改變(可以理解為字串變數)
1.利用陣列儲存的字串是可變的
12.直接利用 指標變數指向的字串,是不可變的void
test1()2;
910char *p =names;
1112 *(p + 3) = 'a'
;1314//
printf("%s\n", p + 2);
1516 printf("
%s\n
", names);
17 }
13.學習指標之前的字串儲存void
test2()
2
char name = "hello" ;
char names[2][10] = ;
4.學習指標之後的字串儲存:
char *name = "hello" ;
//指標陣列:陣列裡面裝的元素是指標
//整形陣列:陣列裡面裝的元素是整型資料
char *names[2] = ;
初學C語言 指標
運算子計算形式意義 px n 指標向位址大的方向移動n個資料 px n 指標向位址小的方向移動n個資料 px 指標向位址大的方向移動1個資料 px 指標向位址小的方向移動1個資料 px py 兩個指標之間相隔資料元數的個數 注 以指標型別為計算單元 若 int arr n int p arr 則有 ...
初學C之指標
指標即指標變數,在c語言中專門儲存系統分配的記憶體位址,我們可以通過這個位址找到記憶體分配的空間,從而進行對變數進行操作。乙個變數的位址稱為該變數的 指標 指標的形式 型別 變數名。int p表示了乙個名字為p,型別為int 的指標變數,實際用來存放int變數位址。p a是將變數a的位址給指標p。如...
c語言初學 const指標
注意 要在宣告的時候進行初始化 宣告的方式 型別名 const 變數名 1.不能再指向別的變數,指標的value不可更改 cpp include void main 報錯 error c2166 l value specifies const object 2.可以通過指標為那個變數賦值 變數值不是...