C 指標問題與學習

2021-08-26 09:52:29 字數 2249 閱讀 8266

1.指標進行初始化和賦值操作的約束

1.0值常量表示式 如編譯時可獲得0值的整型const物件或字面值常量0

2.型別匹配的物件的位址

3.另一物件之後的下一位址

4.同型別的另一有效指標

int val;

int zero = 0;

const int c_val = 0;

int *p1 = val;//error int *p1 = &val

p1 = zero; //error

p1 = c_val; //ok

p1 = 0; //ok

int *p2 = null; //ok

double *p3 = &val; //error:型別不匹配

2.void*指標

可以指向任何型別物件的位址

但:void*指標只有幾種操作:

1.與定義指標進行比較

2.向函式傳遞void*指標或從函式返回void*指標

3.給另一void*指標賦值

不允許使用void*指標操縱它所指向的物件

3.指標與引用的差別

1.引用總是指向某個物件,定義引用時沒有初始化是錯誤的。

2.給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另乙個物件關聯。

3.引用一經初始化就始終指向同乙個特定物件。

4.下標與指標

int a[10] = ;

int *p1 = &a[10];

int j = p1[-2]; //j=a[2]

int k = p1[2]; //k=a[6]

a++; //error

5.指標與const

1.指向const物件的指標

const double *cptr; //指標cptr本身不是const的,而是它所指向的物件是const的

//在定義時可以對cptr不初始化,如果需要,就對其重新賦值,使其指向乙個const物件,一旦賦值後就不能通過cptr指標修改其指向的物件的值,但是此指標可以指向別的物件

如const int val = 56;

const int *cptr = &val;

*cptr = 10; //error

const物件的位址不能賦給非const物件的指標

如:const double *pi = 3.14;

double *ptr = π//error

const *cptr = π//ok

不能使用void*指標指向const物件如:

const int val = 10;

void *p1 = &val; //error

const void *p2 = &val; //ok

允許把非const物件的位址賦給指向const物件的指標

const double *cptr;

double val = 10.0;

cptr = &val; //ok

儘管val不是const的,但是企圖通過cptr來修改val值都是錯誤的

2.const指標

指標本身的值不能改變,即該指標需要在定義時初始化,以後不能再指向別的物件,但是可以通過該指標修改所指物件的值 如:

int num1 = 10,num2 = 20;

int *const ptr = &num1;

*prt = 20;//ok ,modify num1 = 20

ptr = &num2; //error

3.指向const物件的const指標

int val = 10; //或者const int val = 10;

const int *const ptr = &val;

在定義該指標時必須初始化,之後該指標不能指向其他的物件,也不能通過該指標修改其指向的物件的值

int val_1 = 20;

ptr = &val_1;//error

*ptr = 20; //error;

乙個難搞的指標問題

typedef string* pstring;

const pstring cstr; 這句話等價於?

是 const string *cstr;

還是 string *const cstr;

還是const string *const cstr;

答案是string *const cstr;

相當於 const (string*) cstr; 等價於 string *const cstr;也等價於 pstring const cstr;

C 指標問題與學習

1.指標進行初始化和賦值操作的約束 1.0值常量表示式 如編譯時可獲得0值的整型const物件或字面值常量0 2.型別匹配的物件的位址 3.另一物件之後的下一位址 4.同型別的另一有效指標 int val int zero 0 const int c val 0 int p1 val error i...

C 與指標有關的問題

c 是一門功能強大的語言。它既相容了 c中的最重要的內容 指標,又有物件導向的功能,如使用繼承組合以及虛函式實現多型等等。如果使用者對這些內容了解不夠深入具體。則常常在使用 c 的指標時會出現不少問題。現舉一些例子如下。其中全部例子來自書本或者網上 問題 如下 上面的 編譯都能通過,但是執行的結果卻...

學習C語言指標的問題

1 與 的區別 表示的是某個數的位址,表示的是取某個指標裡面的值,列 int a 1 int p a 表示的是定乙個整型變數a 1,然後把a的位址給了p,此時p的指標指向a的位址,則p表示的值也為1 3 指標當中malloc的作用 malloc就是memory allocate動態分配記憶體,mal...