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...