請教!關於C 裡的字串 指標 new的用法

2022-03-25 13:21:16 字數 5809 閱讀 9025

1樓:匿名使用者

p1是一個char指標,p1所指記憶體存放著『a』的地址p2也是char指標,其所指記憶體中存放著變數a的地址p3顯然是不對的,不能把char變數賦值給char指標;

p4則存放著字串的首個字元的地址;

2樓:匿名使用者

陣列名稱就是地址.

char* name=new char[20];中name是一個陣列,也是一個地址,後面有19個位元組(就想象一下有20個空框)。name是這20個位元組的第一個位元組的地址,name+1, name+2……分別是第2、第3個位元組的地址。

cout<

strcpy是複製,直到遇到'\0'。('\0'表示結束,null)char* s =new char[n];表示讓系統在s後面留下n個位元組的空白(n=20,50,100等)。

3樓:匿名使用者

始終記住「指標即地址」

4樓:炎碎刃

我答下你的補充問題

這兩種寫法類似於陣列的宣告和初始化如:

int array[5] = 和

int array[5];

array[0] = 1;

array[1] = 2;

array[2] = 3;

array[3] = 4;

array[4] = 5;

不同之處在於 char *name; 是定義的一個指標指向由 new 操作符分配的動態記憶體空間的地址,故不需要如指標般一個個的對其賦值,可以使用 char *name; name=new char[20]; 的語句結構。

不知道還滿意嗎?不懂得可以再問我~~。

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++裡,new是幹什麼用的,具體的用法是什麼?

11樓:夢中睡客

開闢記憶體空間存貯變數,比如int *p=new int

12樓:匿名使用者

申請記憶體。例如

char*psz=new char[128];

sprintf(psz,"%f", 1200/7.);

messagebox(0,psz,0,0);

13樓:匿名使用者

new 是申請動態儲存空間

⑴new可用來生成動態無名變數,

如 int *p=new int;

int *p=new int [10]; //動態陣列的大小可以是變數或常量;而一般直接宣告陣列時,陣列大小必須是常量

又如:int *p1;

double *p2;

p1=new int(12);

p2=new double [100];

l 分別表示動態分配了用於存放整型資料的記憶體空間,將初值12寫入該記憶體空間,並將首地址值返回指標p1;

l 動態分配了具有100個雙精度實型陣列元素的陣列,同時將各儲存區的首地址指標返回給指標變數p2;

對於生成二維及更高維的陣列,應使用多維指標。

以二維指標為例

int **p=new int* [row]; //row是二維陣列的行,p是指向一個指標陣列的指標

for(int i=0; i

p[i]=new int [col]; //col是二維陣列的列,p是指向一個int陣列的指標

刪除這個二維陣列

for(int i = 0; i < row;i++)

delete p[i]; //先刪除二維陣列的列

delete p;

⑵使用完動態無名變數後應該及時釋放,要用到 delete 運算子

delete p; //釋放單個變數

delete [ ] p;//釋放陣列變數(不論陣列是幾維)

相比於一般的變數宣告,使用new和delete 運算子可方便的使用變數。

c++ 什麼時候用new 指標

14樓:房子a房子

搞懂什麼時候使用new,那就需要先弄懂程式裡面堆和棧的區別。直接宣告變數資料放在程式棧中,但是系統分配給程式的棧的大小與堆相比小很多。對於程式中需要使用比較大的資料時,一般會選擇使用new來將這些比較大的資料存放在堆中。

使用new的時候要注意,一定要在使用完後釋放記憶體,否則程式會記憶體洩露

c++中new運算子的用法

15樓:

c++中new運算子使用的一般格式為new 型別[初值]。用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。

16樓:『吾不笑

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

字串指標移動問題,關於字串和指標的問題

因為 p 沒有分配記憶體,指向的是系統的記憶體,那段記憶體是隻讀的,因此改變那裡的值是錯誤的 char a abcde char p a p 1 w 這樣是正確的,因為a那段記憶體是可寫的 你上面的,你可以理解為 const char a abcde char p a p 1 w 錯誤,因為a是co...

一道C語言關於字串和指標的選擇題

d的問題bai和a的問題是 不一樣的。d中str1的用du字串 zhi常量來初始化的dao,由於str1是指標,所以版不會給它分配權儲存字串的記憶體,它指向的是一個字串常量,就是說它指向的是靜態記憶體,後面strcpy時要修改這段靜態記憶體,所以就出錯了。char str1 12345 給str1陣...

c語言裡怎樣取字串的字元,c語言裡怎樣取一個字串的第一個字元

你定義的是指標型別的還是陣列型別的啊,指標的話取首地址就行了 陣列的話,如char ch array 10 第一個字元就是ch array 0 c語言輸入一串字串從第n個字元開始擷取m個字元組成一個新的字串輸出。1 我們編輯如圖復中輸入的代制碼。2 進入原始檔的目錄下,在終端輸入命令gcc o t ...