當前位置

首頁 > 商務英語 > 計算機英語 > c中的用法

c中的用法

推薦人: 來源: 閱讀: 9.9K 次

c中的用法的用法你知道嗎?下面小編就跟你們詳細介紹下c中的用法的用法,希望對你們有用。

ing-bottom: 100%;">c中的用法

  c中的用法的用法如下:

C中*、&用法介紹

例1、

複製代碼

#include <stdio.h>

int find(int *a);

main()

{

int b = 1;

int wait, test;

test = find(&b);

printf("內存地址爲:%d",&test);

scanf("%d", &wait);

}

int find(int *a)

{

return *a;

}

複製代碼

int b = 1; int test = find(&b); 這樣調用時,實際上是進行了:int* a = &b,創建了一個新的指向b的整型指針a作爲find函數範圍內的局部變量。

示例二

函數聲明:int find(int& a); 函數調用:int b = 1; int n = find(b);

這樣調用時,實際上是進行了:int& a = b,給變量b起了個別名a,也就是說a和b實際上代表的是同一個變量,調用期間沒有創建任何新的變量。

示例三

函數聲明:int find(int a); 函數調用:int b = 1; int n = find(b);

這樣調用時,實際上是進行了:int a = b,也就是普通的變量賦值操作,調用期間創建了在find函數範圍內的局部變量a,它的值與b相同。

&在用於計算時就是取變量地址,如int* a = &b,就是將整型變量b的地址取出,賦值給整型指針a,a中的內容就是b的地址,所以a指向b。

*在用於計算時,就是取指針所指向的地址中的值,如int b = *a,就是將整型指針a指向的地址中存放的內容賦值給整型變量b。

C語言中,&符號大家一定很熟悉吧,它除了可以作爲按位運算“與”之外還有更常用的功能——取變量地址。

複製代碼

#include <stdio.h>

main()

{

int a = 0;

int wait;

int *p = &a;

printf("The value is: %dn", *p);

scanf("%d", &wait);

}

複製代碼

上面代碼中,指針p指向變量a的地址。在C/C++中,每個變量都有其相應的地址,通過在變量標識符前加&符號即可獲得變量的地址。

那麼我們這麼寫可以嗎?int *p = &0x01000;

這顯然不行。因爲對於一個數值常量,它是沒有地址的。而變量之所以有地址就是因爲要有一個存儲單元對變量進行標識(當然,變量也可以直接映射到某個寄存器)。

我們再看下面的代碼:

複製代碼

#include "stdio.h"

int main(void)

{

int a = 0; // &a = 0x0012ff60

int *p = &*(int*)0x0012ff60;

printf("The value is: %dn", *p);

return 0;

}

複製代碼

上面代碼又是怎麼回事呢?

先前已經調查過變量a的地址——0x0012ff60,那麼這裏的指針p實際上也是指向變量a的地址。

首先,將0x0012ff60作類型轉換,轉爲int*,即經過(int*)0x0012ff60後,0x0012ff60轉化成了一個地址,這時它與&a是等價的。(類似的: int a = (int)(((int *)0)+4); (int*)0 已經轉化爲一個地址了,+4 就是表示在剛纔地址上加4,是地址的位移操作。)

然後*(int*)0x0012ff60表示取變量a的內容。

最後,&*(int*)0x0012ff60表示再脫去*(int*)0x0012ff60的解引用,相當於又變爲(int*)&a。

因此,這裏的&與第一個例子中的&是不同的語義。這裏的&不是取地址,因爲一個*(int*)0x0012ff60不是變量,它是沒有地址的。每一個變量標識符在編譯期間,編譯器會爲它們創建一個符號表,其中存放着變量標識符相應的各種屬性,如類型、地址標識等。地址標識在連接後即可確定邏輯地址值。簡而言之,&作爲取地址操作,當且僅當&後面跟着的是變量或函數標識符。所以這裏的&表示脫去解引用。

由此我們可以得出:&作爲取地址操作時,其行爲結果是在編譯時就被確定的;而*,解引用操作(或取內容)操作,其行爲結果只能在運行時纔可被確定。

再看下面的例子,加深印象:

複製代碼

#include "stdio.h"

int main(void)

{

int a = 0;

int *p = &*&*&a;

printf("The value is: %dn", *p);

return 0;

}

複製代碼

在C++中,&還可以表示引用,

複製代碼

#include "iostream"

using namespace std;

int main(void)

{

int a = 0;

int &r = a;

cout << "The value is: " << r << endl;

return 0;

}