Pointers in C/C++
學習C/C++ Pointer
- variables that store address of other variables
p
指向了a的位址且為pointer variable,因此更動*p會更動a位止的值
- 由實驗可以知道p+1代表是將記憶體位址加上integer的size(1為integer),因為p為一個指向a記憶體的變數
*(p+1)
會出先一些垃圾值是因為p+1的記憶體位址是未被定義的,這也是C使用pointer危險的地方,因為他可以訪問未被定義的記憶體
- 重新聲明了p0以後,如果要指向p需要先將他類型轉換成
char*
- C語言中的函數都是在stack中運行
- main函數會在stack中名為stack frame(stack frame會儲存所有局部變數)
- 宣告Increment函數等同於在main中的stack上再創立一個stack
- 因此此時對Increment變數的操作都不會影響到a
int a[5]
相當於在記憶體中有5個連續遞增且大小為4byte的變數,總大小為 5*4=20
- Address
&a[i]
or a+i
- Value
a[i]
or *(a+i)
- Size
sizeof(a)/sizeof(a[0])
- 由於我們已經知道傳入的參數會自動變成指標變數指向array
- 因此在其他functions中更動array的值也會影響到原本的array
- 需要使用null字元當作結尾,以避免出現問題(攏字元)
\0
C語言會自動分配儲存字節,但不算在長度裡面