1樓:
除了樓上說的
& 還有 “引用” 和 “ 取地址”的含義int a; int b = &a; 上述兩行語句執行完之後,a、b表示同一個變數,對其中一個的操作相當於對另一個的操作
int a; int *b = &a; 則b中儲存的是a的地址。對(*b)的任何操作相當於對a的操作。。。
2樓:朱古力兜
表示引用,就是物件的另一個名字,例如 int i = 10; int &j=i,此時i和j代表同一個物件,改變j就是改變i. 但是不能這樣 int &m = 10;,因為引用的要是一個物件。但是加上const 時 ,引用可以初始化為不同型別的物件或者初始化為右值,例如 可以寫成 const int &n=12;
3樓:匿名使用者
&是c++中的邏輯運算,”與“運算。一般來說是兩個 &連用,比如說a與b就是 a&&b。
& 如果是單獨使用則是進行二進位制數的位與運算,比如二進位制數 100 & 101 結果就是 100
& 還可以作為變數的前面表示取變數地址賦值給指標, 如:int a = 0; int *p = &a;
4樓:強子哈哈哈哈
這個叫做引用就是給變數起一個別名 最常見的使用方式就是給函式傳遞引數時候,
int a=1;
int b=2;
int sum;
這樣sum裡面就儲存了a和b的和 這就不用傳遞指標了
c++中new的用法
5樓:老表有點呈
c++中new運算子用於動態分配和撤銷記憶體的運算子。
1、開闢單變數地址空間
new int; //開闢一個存放陣列的儲存空間,返回一個指向該儲存空間的地址.int *a = new int 即為將一個int型別的地址賦值給整型指標a. 2)int *a = new int(5) 作用同上,但是同時將整數賦值為5。
2、開闢陣列空間
要訪問new所開闢的結構體空間,無法直接通過變數名進行,只能通過賦值的指標進行訪問。用new可以動態開闢,撤銷地址空間。在程式設計序時,若用完一個變數,下次需要再用,可以在每次開始使用時開闢一個空間,在用完後撤銷它。
6樓:手機使用者
new int;//開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址(即指標)
new int(100);//開闢一個存放整數的空間,並指定該整數的初值為100,返回一個指向該儲存空間的地址
new char[10];//開闢一個存放字元陣列(包括10個元素)的空間,返回首元素的地址
new int[5][4];//開闢一個存放二維整型陣列(大小為5*4)的空間,返回首元素的地址
float *p=new float (3.14159);//開闢一個存放單精度數的空間,並指定該實數的初值為//3.14159,將返回的該空間的地址賦給指標變數p
new運算子使用的一般格式為 new 型別 [初值] 用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。
delete運算子使用的一般格式為 delete [ ] 指標變數
例如要撤銷上面用new開闢的存放單精度數的空間(上面第5個例子),應該用 delete p;
前面用“new char[10];”開闢的字元陣列空間,如果把new返回的指標賦給了指標變數pt,則應該用以下形式的delete運算子撤銷該空間:
delete pt;//在指標變數前面加一對方括號,表示是對陣列空間的操作
例 開闢空間以存放一個結構體變數。
#include
#include
using namespace std;
struct student //宣告結構體型別student
;int main( )
執行結果為 wang fun 10123 m
7樓:幸運夕夕
c++中new的用法有三種,具體如下:
一、new operator,也叫new表示式;new表示式比較常見,也最常用,例如:
上面這個new表示式完成了兩件事情:申請記憶體和初始化物件。
二、operator new,也叫new操作符。這兩個英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。new操作符類似於c語 言中的malloc,只是負責申請記憶體,例如:
注意: 這裡多了一個operator。這是new的第二個用法,也算比較常見吧。
三、placement new,它用於在給定的記憶體中初始化物件,也就是說你手中已有一塊閒置的記憶體,例如:
那麼現在buffer是你所擁有閒置記憶體的指標buffer = new(buffer) string("abc"); //呼叫了placement new,在buffer所指向的記憶體中初始化string型別的物件,初始值是"abc",事實上,placement new也是new表示式的一種,但是比普通的new表示式多了一個引數,當然完成的操作和返回值也不同。
因此上面new的第一種用法可以分解兩個 動作,分別為後面的兩種用法。
注意:1、使用者是無法主動呼叫建構函式的,所以需要藉助placement new,但是使用者可以主動呼叫解構函式,所以用完這些物件後,呼叫解構函式,然後用對應分配記憶體的方法去釋放記憶體。
2、事實上malloc並不一定比operatornew節省多少時間,用placement new常常是為了考慮效能,所以會配合記憶體池一起使用。
8樓:匿名使用者
new的功能是動態分配記憶體。
語法就是 new 型別名t(初值列表)
9樓:
new 的作用是動態開闢空間,一般的形式估計你也會了。我就直接給你講題吧
你這個函式的作用是動態建立一個(n1+1)*(n2+1)的二維陣列(注:在c++中 直接用new(a)這種形式是錯誤的)
首先明白所謂指標就是存放地址的變數,這一點最重要double **a=new double*[n1+1];
這句話的意思是開闢以一塊連續的空間用來儲存指標變數(指標的指標),它的大小是n1+1。*a是指標,那麼**a就是存放指標的指標。那個new後的double* 相當於一個強制轉換。
因為用new時和陣列的名字無關所以[n1+1]前的陣列名可以省略。這個類比於new double[3];
for(i=0;i<=n1;i++)
這個語句就是給把指標付給指標的指標,看下邊的圖你就明白了;
多琢磨一下!
10樓:有界函式
推薦你看一下effictive c++,這裡面有單獨的一節是講 new 的。細緻的講不了,可以自己去看看。
c++中&和*怎麼用
11樓:往昔
“&”是取地址運算子
“*”的用法有兩種情況:(1)定義指標變數(2)間接訪問運算子int a,*p;
p=&a;
a=*p;
12樓:範
"&"是在整形輸入的時候會用到,“*”就多了,它可以表示算術中的“乘",也可以表示指標的定義。
c++中符號"->"和"."的用法
13樓:匿名使用者
"."和"->"都是二元操作符,格式為:變數(.或->)成員。(成員可以是變數,也可以是函式)。
各自含**釋如下:
1 "." 該操作符認為左邊的變數是一個結構或者類物件。
.將取該變數的成員值(操作符右邊的成員)。
2 "->" 該操作符認為左邊的變數是一個指標。
->將取該指標指向的變數的成員值(操作符右邊的成員)。
所以反推過來,總結這兩個操作符是用來訪問類物件或結構的成員的操作符。
1 如果是結構或類物件的變數,使用操作符"."訪問成員。
2 如果是結構或類物件的指標,使用操作符"->"訪問成員。
14樓:匿名使用者
簡單地說,“.”前是一個類的物件例項,“->”前面是型別指標如c******* abc; //定義一個例項物件abc.setbuttoninfo(); //呼叫成員函式用“.
”c******* *abcd; //定義型別指標abcd->setbuttoninfo(); //呼叫函式用“->”
c++中的引用(&)到底都有什麼用處?
15樓:匿名使用者
比如int f(int a)
當你如下呼叫時:
int b;
f(b);
編譯器會把b的值賦給a,在函式體內操作a;
而如果函式定義為:int f(int& a)當你呼叫時,沒有這個賦值的過程,因為此時a是實參的別名,相當於直接操作了實參b;
從這個例子可以看到引用的兩個特性:
1 節約空間,少了一個實參賦值給形參的過程2 可以直接操作實參,而不是形參
你說的物件導向中的節約記憶體,就是第一個特性,因為類物件往往很大,如果賦值方法進行函式呼叫的話,會增加開銷。
16樓:匿名使用者
主要是引數傳遞時起作用,普通的引數傳遞,其實是傳遞了一份拷貝,如果引數比較複雜,比如大物件,那麼產生的開銷會很大;而且普通的引數傳遞,不能把更改回寫,而引用傳遞可以改變引數的值。
17樓:匿名使用者
int num = 0;//給num 分配了一個int型的記憶體空間,初始化為 0;
int &n = num;//沒有分配記憶體空間,引用了一個變數名;
相當於給num 又起了一個別名叫 n;使用 n 和 num 是一樣的;
18樓:
比如你要傳遞一個實參 如果實參過大 為了避免複製就可以用引用
19樓:匿名使用者
貌似。。。直接點&就是取地址符,取記憶體地址,好像哈~~~~
20樓:匿名使用者
我也是半桶水,我就把它理解為指標,他有指標的一些優勢,但和指標又有不同。
編譯器會為指標分配空間,不會為引用分配空間。
比如呼叫函式,傳遞引數時,可以避免把實參複製給形參的消耗。
21樓:匿名使用者
引用在一定程度上就是指標。在c中,用指標作為變數呼叫函式,往往需要先把變數的地址賦值給一個指標變數,然後用這個指標變數作為函式實參。
其實有很多情況下我們在寫程式得時候可能沒想到定義得這個變數被用到函式引數中,但是確實需要,而且要求其數值改變,那麼引用就可以做到這一點,在傳遞引數的同時還可以使得實引數值發生改變,因而增加了靈活性。
22樓:南京葉巨集
c/c++的另一特點是完備的指標型別,指標(pointer)的本質其實就是單元的地址,若當初翻譯成接地氣的“地址型別”更合適。指標可以靈活操縱各種型別,但一些人濫用指標而鑽起了牛角尖。c語言的函式只有傳值呼叫,沒有傳址引數,用指標可以間接實現,但不直觀、方便或帶來錯誤,所以,c++引入“引用”型別(reference),以解決c語言只有傳值呼叫的缺陷。
“引用“型別只是指標型別的補充,兩者內部有相似的地方, 有時引用可以簡化指標的使用。
引用的本質,就是用地址單元直接表示這個地址指向的單元。相當於彙編的間接定址。
為何靜態引用出現“限制”
如果要問為什麼c++不能訪問“應用”自已?這要涉及它增加“應用型別"的目的:是為了函式的傳址呼叫,而不是為了讓你靜態使用、發揮。
傳址呼叫時,實參的地址送入棧中的形參單元,子程式內是通過形參才能訪問實參,而不許訪問棧中的形參(實參的地址)。編譯器故意阻止了對應用單元(形參)本身的訪問,不是疏忽,而是精心設計,防止子程式內**無意中損壞了形參中的地址,這樣才能不出現***,這就是真正原因。
c 中NEW運算子的用法,C 中new的用法
c 中new運算子使用的一般格式為new 型別 初值 用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。 吾不笑 new int 開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址 即...
c中new和delete的用法
肥仙女 在c 程式設計中,使用new分配的陣列可用delete釋放。這裡釋放的是動態分配的陣列空間,而不是靜態分配的陣列空間,詳細步驟 1 例如,我們動態建立了一個一維int陣列arr,現在需要將它釋放。2 這時只需要使用delete陣列名即可。3 注意,要釋放陣列所佔的記憶體,不能少。否則,用de...
C中IndexOf的用法問題,indexOf 的用法,具體是什麼意思??
indexof 查詢字串中指定字元或字串首次出現的位置,返首索引值,如 str1.indexof 字 查詢 字 在str1中的索引值 位置 str1.indexof 字串 查詢 字串 的第一個字元在str1中的索引值 位置 str1.indexof 字 start,end 從str1第start 1...