c++

c++指針

c++指針

c++是C編程模型的擴展。內存是由字或字節組成的序列,由整數索引的地址訪問。現代機器支持直接函數調用堆棧,輸入-輸出操作需要特殊的機器指令或使用特殊語義訪問“內存”位置。任何高級語言都會發現使用這些工具非常麻煩,而且是特定於機器體係結構的。C語言是迄今為止為程序員提供與機器模型緊密匹配的編程模型的最成功的語言。C提供了語言級和獨立於機器體係結構的概念,直接映射到關鍵硬件概念:使用字節的字符,使用單詞的整數,使用尋址機製的指針,用於程序抽象的函數,以及沒有限製語言特性,以便程序員可以操作不可避免的特定於硬件的混亂細節。

在學習c++指針之前,讓我們先了解一下C語言中的指針。C數組隻是一個由整數索引訪問的內存位置序列。例如:

Int num [10];// 10個int的數組num[3] = 11;// assign 11為num[3] int x = num[3];//讀取num[3]中的值並賦值給x

下標表示法[]既用於表示數組的聲明,也用於引用數組元素的表達式。C指針是存儲內存地址的變量。例如:

int * p;// p是指向int的指針p = &num[3];//將num[3]的地址賦給p *p = 14;//通過指針p將14寫入num[3] int ptrVal = *p//從num[3]讀到p並賦值給ptrVal

指針解引用(“指向”)符號*既用於聲明指針,也用於表達式引用所指向的元素。c++建立在C語言的表達式、控製結構和函數的思想之上。許多c++任務,例如將函數作為回調函數,使用指針可以更容易地執行。像動態內存分配這樣的事情沒有它們就無法執行。每個變量都是一個內存位置,每個內存位置都定義了它的地址,可以使用&(&)操作符訪問,該操作符表示內存中的地址。

簡而言之,指針是保存另一個變量的內存地址的變量。它可以被聲明為

類型* variablename;

int * ptr;//指向整數變量float *fp的指針;//指向浮點數的指針//指向字符變量的指針

我們使用&操作符將變量的內存地址賦給指針,並使用*操作符訪問指針中存儲在內存位置的值。下麵的代碼顯示了指針的工作。將代碼保存在一個文件中,例如pointerDemo.cpp

#include 使用命名空間std;Int main () {Int count = 20;//實際變量聲明。int * iptr;//指針變量iptr = &count//在指針變量cout中存儲var的地址<< " counter變量的值:";Cout << count << endl;//打印存儲在ip指針變量cout中的地址<< "存儲在iptr變量中的地址:";Cout << iptr << endl;//訪問指針cout中可用地址的值<< " *iptr變量的值:"; cout << *iptr << endl; return 0; }

現在運行compile並運行程序(base) 22:48:10:~ % g++ pointerDemo.cpp (base) 22:48:12:~ % ./a。out計數器變量值:20 iptr變量保存的地址:0x7ffee14227a8 *iptr變量值:20

你可以看到計數器的值可以通過變量和指針訪問,計數器變量的地址是十六進製0x7ffee14227a8。用NULL初始化指針變量總是一個好主意。空指針是一些標準庫中定義的值為0的常量

現在我們來看看如何將指針傳遞給函數。將以下代碼保存在一個文件中,例如pointerAsArg.cpp。

#include 使用命名空間std;(Int *ptr1, Int *ptr2);Int main () {Int num1, num2;cout << "輸入第一個數字:";Cin >> num1;cout << "輸入第二個數字:";Cin >> num2;int *ptr1=NULL, *ptr2=NULL;Ptr1 = &num1;Ptr2 = &num2; int result; result = add(ptr1, ptr2); // print the sum of num1 and num2 cout << num1 <<" + "<

現在編譯代碼並運行它。這段代碼接受user的兩個整數作為輸入,將它們作為指針傳遞給本地函數,將它們相加並返回它們的和。

(基地)22:58:15:~ % g++ pointerAsArg.cpp(基地)22:58:20:~ %。/。out第一個數字:12輸入第二個數字:13 12 + 13 = 25

Baidu
map