1. 程式人生 > >C語言之常指標

C語言之常指標


今天首先學習了const變數定義的方式(兩種):
第一種定義方式:const 在型別的前面,例如:
const int var=100;
第二種定義方式:const 在型別的後面,例如:
int const var1=999;
注:這兩種定義方式沒有什麼區別。

1、const變數在定義的時候進行初始化;
2、當一個變數被宣告為const變數時,意味著該變數是一個常量,不可被修改;
3、該變數只能做右值,不能做左值;

然後我們學習了,const指標,也叫做常指標。

1、常指標在宣告的時候進行初始化;
2、指標不能再指向別的變數,指標的value不了被修改。
3、可以通過指標來修改變數的值。

常指標:例如:int * const pp=NULL;

指向常量的指標:
int x = 123;
const int *pc = &x;
1、指向常量的指標,該指標可以指向別的變數,指標的value可以更改。
2、指向常量的指標、不能賦值給一個普通的指標


接下來我們做了一些練習(如下):

 const int x=2,y=3;      //定義基本型別的const變數
 int z=3;                         //定義一個非const 變數 
 const int *pc=&x;       //指向常量的指標
 int *const cp = &z;     //常指標,指標不能再指向別的變數
 int *pp = &z;               //定義一個非const指標pp 把z的地址給了指標

  z=y;                            // 對 const 變數只能做右值,不能做左值

 x = y;                          // 錯 x是const變數,所以x的值不可更改

 pc=&z;                      // 對 指向常量的指標,不能通過指標去修改指標所指向
                                   //的記憶體空間的值,但是,指標可以指向別的變數。

 *pc=10;                   //錯 指向常量的指標,不能通過指標去修改指標所指向
                                  //的記憶體空間的值
 *pc=y;                      //同上
 *pc = 5;                   //同上
  pc=pp;                   // 對 指向常量的指標可以改變指向的地址
                                 //pc是一個指向常量的指標,pp是一個普通的指標。
                                //pp是一個普通的指標。用一個普通的指標給一個常量的指標賦值是可以的。
  pp = pc;              /*對
                               用一個指向常量的指標,賦值給一個普通的指標,不可以,
                              如果可以,那麼就可以通過普通的指標去修改記憶體的值
                               */

 z = 5;                   //對 變數可以改變值,給一個非const賦值是可以的。

z = x; //對 const只能做右值,用一個const的變數給一個非const變數賦值可以。

*cp = x; //錯 通過常指標改變指標所指向變數的值,原則上來講是可以的,
//如果只想的變數是const的,那麼不停編譯會有不同的結果。

cp=&x; //錯 cp是常指標不能改變指標自身的值。給常指標賦值是錯誤的。

//兩種觀點
pp = &x; //原則上是可以的,pp為普通的指標,可以通過這種方式給pp賦值。
//錯,通過指標去修改變數的值,而不管該變數是否為const,
//x是const常量,不能被改變。

pp = pc; //錯 普通的指標可以改變它指向的地址的值,指向常量的指標不可以改變它指向地址的值
//錯指向常量的指標不能賦值給一個普通的指標

pp = cp; //對 cp指向的是一個變數的地址,pp是一個不同的指標,可以把cp的值給pp
//常指標可以賦值給一個普通的指標

const int * const pp = &a; //記憶體空間和值都不能被改變

相關推薦

C語言指標

今天首先學習了const變數定義的方式(兩種): 第一種定義方式:const 在型別的前面,例如: const int var=100; 第二種定義方式:const 在型別的後面,例如: int const var1=999; 注:這兩種定義方式沒有什麼區別。 1、con

C語言二級指標

#include<stdio.h>int main(){ int a=10;            //宣告一個int型變數a int

C語言複雜指標簡析

指標陣列和陣列指標 指標陣列:首先它是一個數組,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是“儲存指標的陣列”的簡稱。 陣列指標:首先它是一個指標,它指向一個數組。在 32 位系統下永遠是佔 4 個位元組,至於它指向的陣列佔多少位元組,不知道。

c語言常量指標指標常量

在c\c++中用關鍵字const來定義一個只讀的變數和物件,它有如下的優點: 1.fun(const int var ){...}不予許對傳入的引數進行修改,用於保護實參。 2.有如有一個巨集定義,或

C語言一級指標與二級指標剖析

什麼是指標?        在電腦科學中,指標(Pointer)是程式語言中的一個物件,利用地址,  它的值直接指向(points to)存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為“指標”。意思是

C語言_指標陣列、結構體、動態記憶體分配

1、sizeof() int main() { int a[20]; int count=sizeof(a)/sizeof(int); printf(“%d\n”,count); return 0; } 2、指標陣列

C語言漫談指標(上)

C語言之漫談指標(上)   在C語言學習的途中,我們永遠有一個繞不了的坑,那就是——指標。 在這篇文章中我們就談一談指標的一些基礎知識。   綱要: 零.談指標之前的小知識 一.指標與指標變數 二.指標變數的型別 三.指標的解引用 四.野指標 五.指標運算 六.指標與陣列 七.二級指標

C語言漫談指標(下)

C語言之漫談指標(下) 在上節我們講到了一些關於指標的基礎知識: 詳見:C語言之漫談指標(上) 本節大綱: 零.小tips 一.字元指標 二.指標陣列與陣列指標 三.陣列傳參與指標傳參 四.函式指標及函式指標陣列 五.回撥函式 六.例題講解   零.小tips 在正式開始下節之前,我們先來穿插兩

C語言你不得不知的指標(二)

 C語言之你不得不知的指標(二)         指標是一個地址,指標變數是存放地址的變數。通過下面這幾段程式可以很好的理解指標和指標變數。              

C語言指標筆記(1)

指標(pointer)是C語言中最重要的概念之一,用於儲存變數的地址。 1.&運算子 (1)一元&運算子可給出變數的儲存地址。如過pooh是變數名,那麼&pooh是變數地址。 (2)如下例所示,使用運算子檢視不同函式中的同名變數儲存在什麼位置。 原始碼: //檢視

嵌入式C語言C語言的高階表達與指標的高階應用

指標陣列與陣列指標、函式指標:                   指標陣列  int *p[5]   相當於int *(p[5])  (陣

C語言指標詳解

指標 &:操作符產生它的運算元的地址。 如: int a, *b (*b:指向整形變數的指標)     ....     b = &a; (&操作符取變數a的地址,並把它賦值給指標變數) *操作符

C語言指標與二維陣列

    指標,其實就是地址,可以指向一塊自己分配大小的空間。陣列即是多塊一位的空間的線性排布。二維陣列,雖然在人文定義的感覺上有了面的理解,但實際在記憶體中也是一維的線性空間。     對於討論二維陣列,首先我們應該先討論一維陣列與

嵌入式開發C語言指向陣列的指標

一維陣列和指標: 對於一位陣列和指標是很好理解的: 一維陣列名: 對於這樣的一維陣列:int a[5]; a作為陣列名就是我們陣列的首地址, a是一個地址常量 . 首先說說常量和變數的關係, 對於變數來說, 用箱子去比喻再好不過了, 宣告一個

C語言指標學習

我們知道計算機中每一個變數都有一個記憶體位置,每一個記憶體位置都定義了可使用連字號(&)運算子訪問的地址,它表示了在記憶體中的一個地址。 例如 這裡6356748就是a的記憶體地址 什麼是指標呢? 指標是一個變數,其值為另一個變數的地址,即,記憶體位置的直

C語言指標指標陣列、陣列指標、函式指標、二重指標、泛型函式

指標陣列:數組裡面的每個元素都是指標;char*  array[]={"hello","world","ooo"};理解:陣列中有三個元素,每個元素都是char*型別,陣列中儲存的是三個字串的首地址;64位的作業系統中指標佔8個位元組;32位作業系統指標佔4個位元組;注意:指

C語言最好理解的通過函式指標作為引數實現回撥函式

1、函式指標回撥解釋 回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式 2、程式碼實現 #i

C語言指向一維陣列的指標

int array[5] = {1, 2, 3, 4, 5}; // 定義陣列 int *intptr = array; // 定義指向陣列元素的指標 int (*arrayptr)[5] = &array; // 定義指向陣列的指標 上述三條語句分別

C語言指標專題一:指標變數和指標所指向的記憶體空間是兩個不同的概念

指標變數和指標所指向的記憶體空間是兩個不同的概念 char*p = "123456";//p是一個指標變數存放在臨時棧區,"123456"是一個字串常量存放在常量區,變數p儲存的是字串的地址 char*str = (char*)malloc(100);//將分配的100位

Android NDK開發C語言基礎及指標

我們知道 , Android系統是基於linux開發 , 採用的是linux核心 , Android APP開發大部分也要和系統打交道 , 只是Android FrameWork 幫我們遮蔽了系統操作 , 我們從Android 系統的分成結構可以看出 , Android FrameWork是通過JNI與底層的