㈠ 請問new char是C++還是c語言的呢它的作用是什麼,如果是C++的轉換成C語言要怎麼表達呢
new是C++定義的運算符之一,其作用相當於C語言中的malloc函數,即在堆內存上分配用戶指定的大小的內存。
使用new申請的內存必須使用delete函數釋放,就像C語言中使用free函數釋放一樣,否則會造成內存泄漏
改成a=(char
*)malloc((n+1)*sizeof(char));也可以,不過比new
char多分配了一個char的內存空間,倒也無關緊要。因為C++是兼容C語言的語法和運行庫的,所以改動後的語句是可以在C++環境下運行的。
㈡ C語言中的malloc和C++中new的區別
new是C++的運算符
malloc是C的函數。
所以從效率上來說
new的效率更高。
另外,
在對象操作上,new會調用構造函數,而malloc只是單純分配內存。
所以
在C++對象申請中,必須用new而不是malloc
㈢ C語言中new的用法
new的用法
開辟單變數地址空間
使用new運算符時必須已知數據類型,new運算符會向系統堆區申請足夠的存儲空間,如果申請成功,就返回該內存塊的首地址,如果申請不成功,則返回零值。
new運算符返回的是一個指向所分配類型變數(對象)的指針。對所創建的變數或對象,都是通過該指針來間接操作的,而動態創建的對象本身沒有標識符名。
一般使用格式:
格式1:指針變數名=new 類型標識符;
格式2:指針變數名=new 類型標識符(初始值);
格式3:指針變數名=new 類型標識符[內存單元個數];
說明:格式1和格式2都是申請分配某一數據類型所佔位元組數的內存空間;但是格式2在內存分配成功後,同時將一初值存放到該內存單元中;而格式3可同時分配若干個內存單元,相當於形成一個動態數組。例如:
1)new int;//開辟一個存放整數的存儲空間,返回一個指向該存儲空間的地址。int *a = new int 即為將一個int類型的地址賦值給整型指針a
2)int *a = new int(5) 作用同上,但是同時將整數空間賦值為5
2.開辟數組空間
對於數組進行動態分配的格式為:
指針變數名=new 類型名[下標表達式];
delete [ ] 指向該數組的指針變數名;
兩式中的方括弧是非常重要的,兩者必須配對使用,如果delete語句中少了方括弧,因編譯器認為該指針是指向數組第一個元素的指針,會產生回收不徹底的問題(只回收了第一個元素所佔空間),加了方括弧後就轉化為指向數組的指針,回收整個數組。
delete []的方括弧中不需要填數組元素數,系統自知。即使寫了,編譯器也忽略。
請注意「下標表達式」不必是常量表達式,即它的值不必在編譯時確定,可以在運行時確定。
一維: int *a = new int[100];//開辟一個大小為100的整型數組空間
二維: int **a = new int[5][6]
三維及其以上:依此類推.
一般用法: new 類型 (初值)
(3)c語言里用new嗎擴展閱讀
c語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大,依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作。
因此既能夠用於開發系統程序,也可用於開發應用軟體。通過對C語言進行研究分析,總結出其主要特點如下:
(1)簡潔的語言
C語言包含有各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且多以小寫字母為主,對許多不必要的部分進行了精簡。
實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。
(2)具有結構化的控制語句
C語言是一種結構化的語言,提供的控制語句具有結構化特徵,如for語句、if⋯else語句和switch語句等。可以用於實現函數的邏輯控制,方便麵向過程的程序設計。
(3)豐富的數據類型
C語言包含的數據類型廣泛,不僅包含有傳統的字元型、整型、浮點型、數組類型等數據類型,還具有其他編程語言所不具備的數據類型,其中以指針類型數據使用最為靈活,可以通過編程對各種數據結構進行計算。
(4)豐富的運算符
c語言包含34個運算符,它將賦值、括弧等均視作運算符來操作,使C程序的表達式類型和運算符類型均非常豐富。
(5)可對物理地址進行直接操作
C語言允許對硬體內存地址進行直接讀寫,以此可以實現匯編語言的主要功能,並可直接操作硬體。c語言不但具備高級語言所具有的良好特性,又包含了許多低級語言的優勢,故在系統軟體編程領域有著廣泛的應用。
(6)代碼具有較好的可移植性
c語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境。
在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植,這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。
(7)可生成的高質量目標代碼,高執行效率的程序
與其他高級語言相比,C語言可以生成高質量和高效率的目標代碼,故通常應用於對代碼質量和執行效率要求較高的嵌入式系統程序的編寫。
㈣ C語言中已經有了malloc和free,為什麼還需要new和delete
轉的
1,malloc與free是C++/C語言的標准庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。
2, 對於非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由於malloc/free是庫函數而不是運算符,不在編譯器控制許可權之內,不能夠把執行構造函數和析構函數的任務強加於malloc/free。
3,因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。
4,C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存
new 是個操作符,和什麼"+","-","="...有一樣的地位
簡單的說:
malloc,free是c的函數,new,delete是c++的運算符
此外,new是強制類型的,malloc不是,需要類型轉換
當然還有很多不同
new 可以調用構造函數在聲明的時候初始化
malloc只是分配空間,需要在其他地方初始化
而delete不僅會釋放空間,在釋放前會調用析構函數
而且malloc需要指定分配空間大小, 而new是自動計算的
㈤ 關於c語言中new字元的使用。
取決於你內存使用方式,pt僅僅是一指針,你想用它指向輸入緩沖區,或者自己新申請內存都可以。
如果指向新申請內存,你記得要釋放掉,以免造成內存泄露,你的函數僅僅是搜索,不需要新申請內存,就把指針指向輸入緩沖區就很好
㈥ 在.c文件中是不是不能使用new
在C語言中 我們必須使用malloc函數,因為C語言沒有new這個操作符,編譯器是C++的話,我也不知道能不能使用new,反正我是不能…….
下面都是網上有的,你可以網路malloc的用法,就行了。
C語言的malloc函數的使用方法:
1.首先定義一個long指針,像這樣long* pNumber;
2.動態開辟一片內存(1000000個long),可以這樣malloc(sizeof(long) * 1000000); malloc函數唯一的參數是一個size_t(unsigned long類型),它表示你要開辟的內存的大小,我們要開辟1000000個long.
3.返回一個void*指針,我們必須轉換成long*指針,像這樣(long*)malloc(..);
所以你要的程序就是:
long *pNumber = (long*)malloc(sizeof(long) * 1000000);
開辟後就可以像數組一樣使用它了
使用完後,一定要記得釋放它,用free,像這樣free(pNumber);
使用new更方便
代碼:
long* pNumber = new long[1000000];
使用完後,使用delete[]
像delete[] pNumnber;
有什麼疑問可以Hi我……不需要提問什麼的。
2013 5 27 9:26
㈦ C語言new函數到底應該怎麼使用
C語言中沒有new函數,但是有malloc函數
原型:void *malloc(unsigned int size);
#include<stdlib.h>或#include <malloc.h>
malloc 向系統申請分配指定size個位元組的內存空間(連續的一塊內存)。返回類型是 void* 類型。void* 表示未確定類型的指針。
malloc 只管分配內存,並不能對所得的內存進行初始化,所以得到的一片新內存中,其值將是隨機的。
申請零位元組內存,函數並不返回NULL,而是返回一個正常的內存地址,但是你卻無法使用這塊大小為0的內存。
#include<stdio.h>
#include<conio.h>
intmain(void)
{
inti,n;
char*buffer;
printf("Howlongdoyouwantthestring?");
scanf("%d",&i);
buffer=(char*)malloc(i+1);
if(buffer==NULL)
{
exit(1);
}
for(n=0;n<i;n++)
{
buffer[n]=rand()%26+'a';/*generate0-25*/
}
buffer[i]='