根據陣列定義可知,其在一塊記憶體中連續分配了一批相同資料型別的變數,這也為使用陣列下標進行資料操作提供了可能。因為編譯器能根據資料型別大小和陣列下標以及首元素位址直接計算出需要訪問的變數的位址,從而實現下標訪問的功能,提高了開發程式的效率。
1、&a:是乙個常量,故只能做右值,表示整個陣列的位址,數值上和陣列首元素的首位址相等(見下面**中檢視各符號數值
)。,但意義不同,主要體現在編譯器的型別檢查(見下面**中做型別匹配
)以及指標運算時的步進值不同(見下面**中做指標運算
)。3、a:是陣列名稱,因陣列只能單個元素操作,故其沒有做左值的情況,即不存在
a =
,只能在初始化時使用int a[10]=
。做右值時意義和&a[0]相同,均表示陣列首元素的首位址。具體見**段中所示。
#include
intmain()
;int
*p =
null
;int
*q =
null
;int
*m =
null
;int
(*n)[10
]=null
;//定義乙個陣列的指標型別
/*1、檢視各符號數值*/
printf
("&a[%p]\n"
,&a)
;printf
("&a[0][%p]\n"
,&a[0]
);printf
("a[%p]\n"
, a)
;/*2、做型別匹配*/
//p = &a; //warning: assignment from incompatible pointer type //指標型別不匹配
q =&a[0];
m = a;
n =&a;//沒有警告 型別匹配
/*3、做指標運算*/
printf
("\n ++q[%p]\n"
,++q)
;//0xa4-0xa0 = 4
printf
("a+1[%p]\n"
, a+1)
;//0xa4-0xa0 = 4
printf
("++m[%p]\n"
,++m)
;//0xa4-0xa0 = 4
printf
("++n[%p]\n"
,++n)
;//0xc8-0xa0 = 40
printf
("&a+1[%p]\n"
,&a+1)
;//0xc8-0xa0 = 40
return0;
}/****************************
執行結果為:
&a [0x7fffcb0953a0]
&a[0] [0x7fffcb0953a0]
a [0x7fffcb0953a0]
++q [0x7fffcb0953a4]
a+1 [0x7fffcb0953a4]
++m [0x7fffcb0953a4]
++n [0x7fffcb0953c8]
&a+1 [0x7fffcb0953c8]
****************************/
指標變數進行運算時的步進值由該指標指向的記憶體塊大小
決定,即由指向的資料的型別決定。若指向int
型別,則步進值為sizeof(int)=4
,指標運算時,則以4個位元組為單位,例如:int *p = null,p=p+2
,即指標p
實際移動了sizeof(int)*2 =8
個位元組。若指向陣列型別,則步進值為sizeof(陣列名稱)
,同理可得指標運算時移動的位元組數。 練習三總結
一.動態規劃,它是解決 多過程問題的一種方法,它包括兩種思想 區域性原則和區域性最優原則 即把乙個問題通過狀態轉移方程 通常是遞迴 劃分成多個子問題,然後再按步驟尋找區域性最優解,這樣按步驟得到最優解。技巧 通過做這幾道題來看,有的題目完全就是可以通過dp,遞迴等別的方法來解決,動態規劃的優點是用乙...
專題三總結
這個專題講的是動態規劃的內容,到現在為止,已經做了3 個專題了,我個人認為,動態規劃這個專題還是挺好做的,沒有剛開始老師說的的那麼難。先來點理論知識吧。所謂動態規劃,它是解決多階段決策問題的一種方法。動態規劃的指導思想就是在做每一步決策時,列出各種可能的區域性解,依據某種判定條件,捨棄那些肯定不能得...
SDAU練習三總結
動態規劃程式設計是對解最優化問題的一種途徑,是解決多階段決策問題的一種方法。在每乙個階段都需作出決策,並影響到下乙個階段的決策。多階段決策問題,就是要在可以選擇的那些策略中間,選取乙個最優策略,使在預定的標準下達到最好的效果動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解...