sizeof,數組,指針


sizeof計算數據類型或變量長度(包括‘\0’),如果計算的變量是一個表達式或函數,只與其最終結果或返回值的類型相關,表達式並不計算,函數也不進行執行。注意計算字符串時計算\0,而strlen不計算\0。

int a[10];

sizeof(a)//計算的就是整個數組的長度,為40; &a,表示取出整個數組的地址,sizeof(&a)=4,sizeof(*&a)=40

其他情況,數組名a均退化為指針。

動態數組的創建和釋放
(1)一維數組:
int* arr = new int[n];
delete[] arr;
(2)二維數組:
int** arr = new int*[row];
for (int i = 0; i < row; i++)
{
    arr[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
    delete[] arr[i];
}
delete[] arr;

指針數組:int* arr_ptr[5];  這是一個元素全部是指針的數組

數組指針:int (*arr_ptr)[5]; 這是一個指針,指向了一個數組

以下個人理解,不保證正確:

int arr[5] = { 1,2,3,4,5 };

arr的本質並不是一個地址,而是一個地址加一個大小,表示的是整個數組

輸出arr, &arr, &arr[0]的值是相同的,但是arr本質並不是一個地址,而是一個完整的數組,包含arr[0]的地址和數組的大小,當函數調用的時候arr才從數組退化為指針。

而int (*ptr)=&arr;表示ptr指向了數組arr, (*ptr)[i]=arr[i]。ptr+1指向的是arr[4]后面的地址。

 

void類型指針,可以儲存任意類型的對象的地址。

指向常量的指針:指針不能改變所指對象的值,但是可以改變所指對象。

const int *p=&a;

指針類型常量:不可改變所指對象

int * const p=&a;

指針型函數,返回值為指針的函數

int* a(){

  return int*;

}

指向函數的指針:

int B(double) { return int; }

int (* A)(double);

A  a;

a=B;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM