1. 程式人生 > 實用技巧 >Flutter 1.22版本新增的Button

Flutter 1.22版本新增的Button

&表示取變數的地址值

int main(int argc, const char * argv[]) {
    int i;
    char a;
    i = 30;
    a = 't';
    printf("%p\n%p\n",&i,&a);
    return 0;
}
執行結果:
0x7fff5fbff83c
0x7fff5fbff83b
Program ended with exit code: 0

  

int *p; p表示的是一個指標變數,它的值是某個整型變數的地址。int * 是一個數據型別,叫做指標型別。

記憶體單元的地址稱為指標。專門用來存放地址的變數,稱為指標變數(pointer variable)。在不影響理解的情況下,有時對地址、指標和指標變數不區分,通稱指標。

所有資料型別的指標(整型、字元型、陣列、結構等)在32位機上都是32位(4個位元組)。也就是說指標只與作業系統有關。 例如:
staic int p1; /p1是指向靜態整型變數的指標變數/
float p2; /p2是指向浮點型變數的指標變數
/
char p3; /p3是指向字元型變數的指標變數/
對於指標變數的定義,需要注意以下兩點。
① 指標變數的變數名是“
”後面的內容,而不是“p2”、“p3”。“*”只是說明定義的是一個指標變數。
② 雖然所有的指標變數都是等長的,但仍然需要定義指標的型別說明符。因為對指標變數的其他操作(如加、減等)都涉及指標所指向變數的資料寬度。要注意的是,一個指標變數只能指向同類型的變數。上例中的p2只能指向浮點型變數,不能時而指向一個浮點變數,時而又指向一個字元型變數。
指標變數的值只能是變數的地址,不能是其他資料,否則將引起錯誤。 C語言中提供了地址運算子“&”來表示變數的地址,其一般形式為:&變數名;
如“&a”表示變數a的地址,“&b”表示變數b的地址。 & — 取地址運算子;
* — 指標運算子(間接存取運算子)。 如:int a = 100; int * p = &a;
兩個運算子互為逆操作。例如“&a”或者“p”就是取變數a的地址,而“a”或者“ * p”就是取指標變數a所指向的儲存單元裡的內容。通過一個指標訪問它所指向的物件的值稱為變數的間接訪問(通過操作符“”)。

程式碼展示:

int main(int argc, const char * argv[]) {
    //int a,b;
    //printf("%d\n",p(a));

    //指標的運算
    int a = 10;
    double  b = 20;
    int *p = &a;
    double *q = &b;
    printf("a = %d &a = %p\n", a, &a);
    printf("p = %p p+2 = %p\n", p, p+2);
    printf("b = %f &b = %p\n", b, &b);
    printf("q = %p q+2 = %p\n", q, q+2);
    return 0;
}
執行結果:
a = 10 &a = 0x7fff5fbff83c
p = 0x7fff5fbff83c p+2 = 0x7fff5fbff844
b = 20.000000 &b = 0x7fff5fbff830
q = 0x7fff5fbff830 q+2 = 0x7fff5fbff840
Program ended with exit code: 0

  

通過上面的例子,我們可以看到,p儲存的地址就是a的地址,對指標變數p進行加2,實則就是相當於在地址上進行偏移同一資料型別佔位元組乘以2,我們已經知道,sizeof(int)是4,sizeof(double)是8。根據程式結果, 整型指標p+2,地址增加了8,相當於兩個整數。double指標q+2,增加了16,相當於兩個雙精度浮點數。注意此程式是在研究指標的運算,列印p+2,q+2代表的地址。並沒有修改對應的記憶體單元的內容。
兩指標相減運算,p-q 運算的結果是兩指標指向的地址位置之間相隔資料的個數。因此,兩指標相減不是兩指標的值相減的結果,而是按下列公式計算出的結果:(p-q)/型別位元組的長度

我們首先首先定義一個結構型別,

struct student
{
   char *name;
   int ages;
};

再根據型別定義結構體變數 struct student stu={"Rose",15};定義一個指標指向結構體型別,struct student *p;把結構體變數stu的地址賦給指標變數p,p=&stu;我們可以有3種方式來訪問結構體中的屬性ages:

stu.ages=15;(*p).ages=15;p->ages=15;不過第三種方式在C語言中只能用來指向結構體。

C++中::的用法:

1、作用域符號

前面一般是該類名稱,後面是該類的成員名稱。C++為避免不同的類有相同的成員而採用作用域的方式進行區分,eg:A,B表示兩個類,在A,B中都有成員member,那麼:A::member表示A中的成員member,B::member表示B中的成員member。

2、全域性作用域符號

當全域性變數在區域性函式中與其中某個變數重名時,可以用::來區分,否則區域性變數會遮蔽全域性變數。

3、作用域分解運算子

比如聲明瞭一個類A,類A裡聲明瞭一個成員函式void f(),但沒有在類的聲明裡給出f函式的定義,那麼在類外定義f時,就要寫成void A::f(),表示這個f函式是類A的成員函式。