今天學習了數組與指針,指針與數組
先對內容進行了一下鋪墊,
void main1(int *p)
{
int *p1 = p//&p; //在這裏賦值給*p1的值是p或&p的區別,如果是p的話最後傳入main函數的值會進行改變,這原理主要是通過對地址進行數據更改,&p就不會被改變了,
//因爲&p相當於重新定義了一個新的地址,所以不會對傳入進來的數值的地址進行更改
*p1 = 100;
}
void main2(int *p)
{
int **p2 = &p; //在這裏傳入的數值是會被改變的,原理和main1當中傳入p是一樣的,不過是對變量的地址上的值的地址進行改動,最後輸出的結果也就會改變了
**p2 = 200;
}
void main()
{
int a = 2;
int *p = &a;
main1(p);//main2(p);
printf("%d",a);
}
還通過對存儲指針的類型進行了講解,想int a = 10;char *p = &a;這種情況下的輸出結果*p是不等於10的,存儲指針必須類型要一致,不然很容易出現錯誤,
下午就講的數組的用指針取得二維數組的值,主要有以下幾種
p = &a將變量a的地址賦給p
p = array將數組array首地址賦給p
p = &array[i]將數組元素的地址賦給p
p = &a[i]+j將數組的第i行第j列賦給p
p1 = p2將指針p2地址賦給p1
只要把賦值給搞明白其實還是很容易理解的,除開賦值之外就是和數組的運用沒什麼差別了,下午老師也花費了很多的心血把指針的取值進行反覆的對比與演練,把數組與數組的關係講的非常的透徹,主要還是得將取值的思路要清晰
指針對一維數組的取值a[]={1,2,3,4};
p = &(a+i),i是數組的下標取值
數組的第一個元素一般表示a[0],它的地址p1= &a[0],爲了方便也可以寫成p1 = &(a+0),然後後面的元素就在0的基礎上進行增加,寫成p = &(a+i)了
針對二維數組的取值a[][3] = {1,2,3,4,5,6,7,8,9};
p=&(a[i]+j);i是數組行的下標,j是數組列的下標
這個也可以通過一維數組的基礎上再進行擴展,每行可以當成一維數組當中第一個值的取值p1=&a[0],每行之後就可以在a[i]的後面進行增加數值所在的列數地址p1 = &(a[0]+0),在多行或多列的時候就可以直接在p1的基礎上進行增加了,寫成p = &(a[i]+j),