陣列指標:用乙個指標變數指向乙個陣列元素,就是陣列指標
作用:使用陣列指標間接訪問陣列元素
注意:(
1)陣列名
a不代表整個陣列,值代表陣列首元素的位址 (
2)」p=a「
的作用是」把
a陣列的首元素的位址賦給指標變數
p「。而不是
」把陣列
a各元素的值賦值給p「
2. 在指標指向陣列元素時,允許進行以下運算:+或
+=,-或
-=,自加,自減,
兩個指標相減(只有p1和
p2都指向同一陣列中的元素時才有意義)
陣列指標的初始化:
int a[4]=;
int *p = a;
//陣列指標,定義了乙個指標變數
p賦值陣列的首位址(第乙個元素的位址),
p指向陣列的第乙個元素
int *p = &a[0]; //
等價上面一句話
陣列指標如何訪問陣列的元素:1)
p+1表示指向陣列的下乙個元素2)
p-1指向陣列的上乙個元素
注意:陣列名
a是乙個常量,陣列名
a是乙個常量
相當於*(10++)
這是錯誤的
//printf(" *a++
=%d\n",*a++); //
錯誤的結論:引用乙個陣列元素,可用下面兩種方法:
下標法,
如a[i]形式
指標法,如*(
a+i)或*(
p+i) a
是常量(
a++錯誤),
p是變數(
p++正確)
4.指標陣列:
存放指標的陣列,就是指標陣列
指標陣列的定義:
資料型別
* 陣列名
[陣列長度
];int *pa[3]; //
定義了乙個指標陣列,陣列名是
pa,可以用來存放
3個指標(必須是
int型別變數的指標)
指標陣列的使用:
int a=3,b=4,c=5;
int *pa[3]=;
pa[0]
a的位址
pa陣列首位址,又是變數
a的位址
5.兩個指標變數之間的運算 1
)兩個指標之間的減法運算
:兩指標變數相減所得只差是兩個指標所指陣列元素之間相差的元素個數。(1
)0x0006
- 0x0003=3
(意義不大)(
2)常見的用法:兩個指標都指向同乙個陣列
i.判斷兩個指標變數指向的元素是否連續
ii.判斷兩個指標變數之間相隔幾個元素
位址差值
(p1-p)*sizeof(int)
int a[5]=;
int *p = a; //p
指向了陣列的第乙個元素
int *p1 = &a[3]; //p
指向了陣列的第四個元素
注意:兩個指標變數之間沒有加法運算
如果兩個指標變數指向同乙個元素
那麼他們相減的結果是
0判斷兩個指標變數指向的元素是否相鄰(連續),他們相減的結果是
1的絕對值
2)兩個指標之間的關係運算
p1 > p
//1表示
p1在高位
//0p
在高位或者他們指向了同乙個位置
6.陣列名訪問二維陣列
#include
int main(int argc, const char *argv) ;
//列指標
//a[0] == &[0][0]
a[0]+1==&a[0][1]
a[0]+2==&a[0][2]
printf("&a[0][1] = %p\n",&a[0][1]);
printf("a[0]+1
=%p\n",a[0]+1);
printf("*(a[0]+1)
=%d\n",*(a[0]+1));
//3
printf("&a[0][2] = %p\n",&a[0][2]);
printf("a[0]+2
=%p\n",a[0]+2);
//行指標
a[0]
a[1]
a[2]
//a+1
//第二行的首位址
//a+2
//第三行的首位址
printf("a[1]
=%p\n",a[1]);
printf("a+1
=%p\n",a+1);
printf("a[2]
=%p\n",a[2]);
printf("a+2
=%p\n",a+2);
// a+1
第二行第乙個元素的位址
//*(a+1)
== &a[1][0]
printf("*(a+1) = %p\n",*(a+1));
printf("&a[1][0] = %p\n",&a[1][0]);
//a[i]+j
獲取的&a[i][j]
//*(a[i]+j)
獲取a[i][j]
//a[i]
*(a+i)
//*(*(a+i)+j); ----->
a[i][j]
for (int i=0; i<3; i++)
printf("\n"); }
return 0; }
7.陣列指標:
定義乙個指標變數,讓這個指標變數指向一維陣列的元素
二維陣列指標
行指標,用來指向二維陣列的每一行,存放的是行的首位址
定義格式:
資料型別
(*行指標變數名
)[陣列第二維的長度
];二維陣列指標的初始化
int a[2][3];
int b[2][2];
float f1[4][4]; //
假設我要定義乙個指向陣列
a的乙個行指標
// a
= &a[0]
= &a[0][0]
= a[0]
int (*p)[3] = a;
二維陣列指標的使用
*(*(p+i)+j)
//就是獲取二維陣列的每個元素
8.指標陣列和二維陣列指標變數的區別:
二維陣列指標變數是單個變數,其一般形式中「(
*指標變數名)
」兩邊的括號不可少。而指標陣列型別表示的是多個指標(一組有序指標)在一般形式中
「*指標陣列名
」兩邊不能有括號。例如:
int(*p)
[3];
表示乙個指向二維陣列的指標變數。該二維陣列的列數為
3或分解為一維陣列的長度為
3.int *p[3]表示p
是乙個指標陣列,有三個下標變數
p[0], p[1], p[2],
均為指標變數
9.字串指標:
定義:char *
字串指標變數名
="字串內容
";用作:用來儲存乙個字串
注意:1
)字串指標變數的定義說明與指向字元變數的指標變數說明是相同的,只能按對指標變數的賦值不同來區別。對指向字元變數的指標變數應賦予該字元變數的位址。
2)使用
字元陣列
來儲存的字串是儲存棧裡的,儲存棧裡面東西是可讀可寫,所以我們可以改變裡面的字元當把乙個字串常量賦值給乙個字元陣列的時候,那麼它會把字串常量中的沒有字元都放在字元陣列裡
3)使用
字元指標
來儲存字串,它儲存的是字串常量位址,常量區是唯讀的,所以我們不可以修改字串中的字元
10.二維字串陣列:
一維字元陣列
char
ch[10]=;
char ch1="abc";
二維字元陣列
char ch2[3][10]=,,};
用二維陣列來儲存多個字串
//用二維的字元陣列可以儲存多個字串
//第一維存的是每個字串的首位址
//每個字串的長度,不能超過第二維長度
charch3[3][5]= a
bc\0\0 d
ef\0\0 k
kkk\0
ch[1][3] = 'z';
11.#include
int main(int argc, const char *argv)
for (int i=0; i<3; i++) //
字串指標和字元陣列的區別
//字串指標:
char *ss ="abc"; //
指向可以改變
//ss
是乙個指標變數
ss ="helloworld!"; //
字元陣列:
chars1="abc";
//s1
是陣列名,是乙個常量,不能被複製
//s1 ="helloworld!";
return 0; }
程式設計師養成記(第十一天)
5位運動員參加了10公尺臺跳水比賽,有人讓他們 比賽結果 a選手說 b第二,我第三 b選手說 我第二,e第四 c選手說 我第一,d第二 d選手說 c最後,我第三 e選手說 我第四,a第一 比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。define crt secure no warni...
C 學習筆記(第十一天)
1 概念 父類,基類 class person 子類 派生類 student 繼承person屬性和方法,擴充套件一些自己屬性和函式 studentnum,studentname.employee 繼承person屬性和方法 teacher 繼承person屬性和方法 圖形類shape 求周長 求面...
運維學習第十一天(Python基礎語法)
程式設計是將問題資料化的乙個過程 python的數字運算規則與四則運算規則一樣 python數字型別轉換 int x 將x轉換為乙個整數 float x 將x轉換為乙個浮點數 complex x 將x轉換為乙個複數,實數部分為x,虛數部分為0 complex x,y 將x和y轉換為乙個複數,實數部分...