首先,要了解這個問題,需要對數組和指針有一定的了解,下面一起來回顧一下
數組的定義
要先定義後使用
格式:類型名稱 數組名[常量表達式(可選)]
int arr[];//數組長度不确定
int arr1[4];//數組長度為4
數組的初始化
數組初始化元素的值預設為0,沒有初始化數組的元素值為随機數
- 初始化數組
# include <stdio.h>
int main(void)
{
int a[4]={1,2,3};
printf("%d\n",a[3]);//初始化數組值為0
return 0;
}
/*
0
Press any key to continue
*/
- 無初始化數組
# include <stdio.h>
int main(void)
{
int a[4];
printf("%d\n",a[3]);//沒有初始化元素值為系統随機數
return 0;
}
/*
-858993460
Press any key to continue
*/
接下來聊聊指派運算符、變量和常量
指派運算符的定義:将一個表達式的值賦給一個左值,其中左值必須能夠被修改,不能是常量!!!換句話說,指派運算符的左值必須是變量
數組的使用
數組名代表第一個元素的首位址,是一個具體的常量,假如讓數組名自增或自減,在其過程中必涉及到指派的運算,而一個位址常量是不能作為指派運算符的左值的,是以,編譯就會報錯
# include <stdio.h>
int main(void)
{
int a[4];
a++;//程式運作到這裡就會報錯
printf("%d\n",a[3]);
return 0;
}
/*
error C2105: '++' needs l-value
*/
指針是用來存放位址的變量,而變量是可以作為指派運算符的左值,是以指針是可以進行自增和自減的,但是要注意的是指針變量有兩種表達方式,其産生的效果是完全不一樣的
- 第一種表達:指針變量操作位址進行自增或自減
# include <stdio.h>
int main(void)
{
int arr[4]={1,2,3,4};
int *p = arr;
printf("%d,%d\n",p,*p);
printf("%d\n",*p++);//按結合性,從右往左進行運算
printf("%d,%d\n",p,*p);
return 0;
}
/*
1703712,1
1
1703716,2
Press any key to continue
*/
- 第二種表達:指針變量操作值進行自增或自減
# include <stdio.h>
int main(void)
{
int arr[4]={1,3,5,7};
int *p = arr;
printf("%d,%d\n",p,*p);
printf("%d\n",(*p)++);
printf("%d,%d\n",p,*p);//p位址始終沒有改變
return 0;
}
/*
1703712,1
1
1703712,2
Press any key to continue
*/