在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C++/ D語言指針
類的訪問修飾符
D語言運算符
D語言邏輯運算符
類指針
D語言元組
D語言指針
D語言模塊
D語言sizeof運算符
D語言混合類型
D語言封裝
D語言條件編譯
類的靜態(tài)成員
D語言do...while循環(huán)
D語言結構體
重載
D語言字符串-String
D語言決策語句
D語言接口
D語言for循環(huán)
D語言switch語句
D語言關聯數組
D語言范圍
D語言枚舉Enums
契約式編程
D語言并發(fā)
D語言開發(fā)環(huán)境設置
D語言別名
D語言常值
D語言常量
D語言函數
D語言if嵌套語句
D語言循環(huán)
D語言概述,D語言是什么?
D語言運算符優(yōu)先級
D語言continue語句
D語言異常處理
D語言break語句
D語言if...else語句
D語言類和對象
類繼承
D語言字符
D語言教程
D語言關系運算符
比較操作符重載
構造函數和析構函數
D語言抽象類
D語言if語句
D語言賦值運算符
D中算術運算符
D語言類成員函數
D語言位運算符
D語言變量
D語言數據類型
D語言文件I/O
D語言數組
一元運算符重載
D語言嵌套switch語句
D語言基本語法
二元運算符重載
this指針
D語言聯合體
D語言模板
D語言嵌套循環(huán)
D語言while循環(huán)

D語言指針

D編程指針是很容易和有趣學習。一些D編程任務的指針進行更容易和其他D編程任務,如動態(tài)存儲器分配,不能沒有它們來執(zhí)行。一個簡單的指針如下所示。

Yiibaier in D

而不是直接指向變量一樣,指針所指向的值賦給變量的地址。正如你所知道的每個變量是一個內存位置和每個存儲單元都有其定義的地址,可以使用符號來訪問(&)運算,是指在存儲器中的地址。認為這將打印中定義的變量的地址如下:

import std.stdio;
 
void main ()
{
   int  var1;
   writeln("Address of var1 variable: ",&var1);

   char var2[10];
   writeln("Address of var2 variable: ",&var2);
}

當上面的代碼被編譯并執(zhí)行,它會產生什么結果如下:

Address of var1 variable: 7FFF52691928
Address of var2 variable: 7FFF52691930

什么是指針?

指針是一個變量,它的值是另一個變量的地址。如同任何變量或常量,必須聲明一個指針,然后才能使用它。一個指針變量聲明的一般形式是:

type *var-name;

其中,type是指針的基本類型;它必須是一個有效的編程類型和var-name是指針變量的名稱。用來聲明一個指針的星號是用于乘法相同的星號。然而,在這個語句中的星號是被用來指定一個變量的指針。以下是有效的指針聲明:

int    *ip;    // yiibaier to an integer
double *dp;    // yiibaier to a double
float  *fp;    // yiibaier to a float
char   *ch     // yiibaier to character

所有指針的值的實際數據類型,整數,浮點數,字符,或以其他方式是否是相同的,代表一個內存地址的十六進制數。不同數據類型的指針之間的唯一區(qū)別是變量或常數,該指針指向的數據類型。

D編程語言使用指針:

有幾個重要的業(yè)務,我們將與指針做的非常頻繁。 (a)我們定義一個指針變量(b)分配一個變量的地址的指針(c)在指針變量中可用的地址最終進入的值。這是通過使用一元運算符*,返回位于其操作數指定的地址變量的值來完成。下面的示例使用這些操作:

import std.stdio;

void main ()
{
   int  var = 20;   // actual variable declaration.
   int  *ip;        // yiibaier variable

   ip = &var;       // store address of var in yiibaier variable

   writeln("Value of var variable: ",var);

   writeln("Address stored in ip variable: ",ip);

   writeln("Value of *ip variable: ",*ip);
}

當上面的代碼被編譯并執(zhí)行,它會產生什么結果如下:

Value of var variable: 20
Address stored in ip variable: 7FFF5FB7E930
Value of *ip variable: 20

Null 指針

它始終是一個好習慣,對NULL指針分配給案件的指針變量你沒有確切的地址進行分配。這樣做是在變量聲明的時候。分配空指針被稱為空指針(null)。

空指針是一個常數為零的幾個標準庫,包括iostream中定義的值。考慮下面的程序:

import std.stdio;

void main ()
{
   int  *ptr = null;
   writeln("The value of ptr is " , ptr) ; 
}

讓我們編譯和運行上面的程序,這將產生以下結果:

The value of ptr is null

在大多數的操作系統,程序不允許在地址0訪問內存,因為內存是??由操作系統保留。然而,存儲器地址0具有特殊的意義;它表明,該指針不旨在指向一個可訪問的存儲器位置。但按照慣例,如果一個指針包含空(零)值,它被假定為不指向什么東西。

要檢查空指針,可以使用一個if語句如下:

if(ptr)     // succeeds if p is not null
if(!ptr)    // succeeds if p is null

因此,如果所有未使用的指針被賦予空值,并且避免使用空指針,能避免未初始化的指針的意外誤操作。很多時候,未初始化的變量舉行一些垃圾值,就很難調試程序。

指針運算

可以對指針的使用加減乘除四則運算符: ++, --, +, -

為了理解指針的算術運算,讓我們認為,ptr是一個整數的指針,假設它32位指向的地址1000整數,讓我們上的指針執(zhí)行以下算術運算:

ptr++

ptr將指向位置1004,因為每次ptr遞增,它會指向下一個整數。此操作將指針移動到下一個內存位置,而不在內存中的位置影響實際值。如果ptr指向一個字符的地址是1000,那么上面的操作將指向位置1001,因為下一個字符將在1001。

遞增一個指針:

我們優(yōu)選使用在我們的程序,而不是一個數組的指針,因為變量指針可以遞增,這是不能被增加,因為它是一個常量指針數組名不同。下面的程序將變量指針來訪問數組中的每個元素成功:

import std.stdio;

const int MAX = 3;

void main ()
{
   int  var[MAX] = [10, 100, 200];
   int  *ptr = &var[0];

   for (int i = 0; i < MAX; i++, ptr++)
   {
      writeln("Address of var[" , i , "] = ",ptr);
      writeln("Value of var[" , i , "] = ",*ptr);
   }
}

當上面的代碼被編譯并執(zhí)行,它會產生一些結果如下:

Address of var[0] = 18FDBC
Value of var[0] = 10
Address of var[1] = 18FDC0
Value of var[1] = 100
Address of var[2] = 18FDC4
Value of var[2] = 200

指針與數組

指針和數組有很大的關系。然而,指針和數組不完