c語言new
❶ c語言 new char
結果值比10大的原因,可能是由於你在字元串賦值時,沒有在字元串的結尾加"\0"吧。
由於strlen()函數是查找"\0"為依據,來統計字元數的,字元串結尾是用"\0"表示結束的。
另外,你這不是C語言,是C++;在C語言里,還沒new操作符,申請內存是用的malloc()函數。
❷ 關於c語言中new字元的使用。
取決於你內存使用方式,pt僅僅是一指針,你想用它指向輸入緩沖區,或者自己新申請內存都可以。
如果指向新申請內存,你記得要釋放掉,以免造成內存泄露,你的函數僅僅是搜索,不需要新申請內存,就把指針指向輸入緩沖區就很好
❸ 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++中new是什麼意思
C++中new運算符用於動態分配和撤銷內存的運算符。
new運算符使用的一般格式為new 類型 [初值]。
用new分配數組空間時不能指定初值。如果由於內存不足等原因而無法正常分配空間,則new會返回一個空指針NULL,用戶可以根據該指針的值判斷分配空間是否成功。
一般來說,使用new申請空間時,是從系統的「堆」(heap)中分配空間。申請所得的空間的位置時根據當時的內存的實際使用情況決定的。但是,在某些特殊情況下,可能需要在程序員指定的特定內存創建對象,這就是所謂的「定位放置new」(placement new)操作。
(4)c語言new擴展閱讀:
1、用定位放置new操作,既可以在棧(stack)上生成對象,也可以在堆(heap)上生成對象。如本例就是在棧上生成一個對象。
2、使用語句A* p=new (mem) A;定位生成對象時,指針p和數組名mem指向同一片存儲區。所以,與其說定位放置new操作是申請空間,還不如說是利用已經請好的空間,真正的申請空間的工作是在此之前完成的。
3、使用語句A *p=new (mem) A;定位生成對象是,會自動調用類A的構造函數,但是由於對象的空間不會自動釋放(對象實際上是借用別人的空間),所以必須顯示的調用類的析構函數,如本例中的p->~A()。
4、萬不得已才使用placement new,只有當你真的在意對象在內存中的特定位置時才使用它。例如,你的硬體有一個內存映像的I/O記時器設備,並且你想放置一個Clock對象在哪那個位置。
參考資料:網路-new
❺ C++中的new改為C語言應該怎麼寫
補充一下,開辟出來的空間最後一定要釋放掉。記得要用free(HISDAT)哦!純粹混分,2分2分……
❻ c語言這new是什麼作用
這個new不是C語言中的,而是C++ 中的。 new後面是一個函數名。new的作用是給對象分配內存空間,很像C語言中的malloc函數,new 返回分配的空間的首地址。
❼ C語言中new的用法
C語言沒有new關鍵詞,應該是C++裡面編譯設計增加了new new就是動態分配一個堆空間. int *p = new int;//使用指針指向新分配的連續空間 也可以是.int *p = new int[10];//數組
❽ 關於c語言中new的使用
必須使用malloc函數,因為C語言沒有new這個操作符,但是如果你的編譯器是C++的話,是可以使用new的。
所以程序就是:
long *pNumber = (long*)malloc(sizeof(long) * 1000000);
開辟後就可以像數組一樣使用它了,使用完後,一定要記得釋放它,用free,像這樣free(pNumber);使用new更方便。
代碼:
long* pNumber = new long[1000000];
使用完後,使用delete[]
像delete[] pNumnber;
(8)c語言new擴展閱讀:
總結C++中三種關於"new"的使用方法
其一是new operator,也叫new表達式;其二是operator new,也叫new操作符。這兩個英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。new表達式比較常見,也最常用,例如:
string* ps = new string("abc");
上面這個new表達式完成了兩件事情:申請內存和初始化對象。
new操作符類似於C語言中的malloc,只是負責申請內存,例如:void* buffer = operator new(sizeof(string));
注意這里多了一個operator。這是new的第二個用法,算比較常見。
第三個用法不常見,它用於在給定的內存中初始化對象,也就是說你手中已有一塊閑置的內存,例如:
void* buffer = operator new(sizeof(string));
//那麼現在buffer是你所擁有閑置內存的指針
buffer = new(buffer) string("abc"); //調用了placement new,在buffer所指向的內存中初始化string類型的對象,初始值是"abc"
事實上,placement new也是new表達式的一種,但是比普通的new表達式多了一個參數,當然完成的操作和返回值也不同。
因此上面new的第一種用法可以分解兩個動作,分別為後面的兩種用法。
與new對應的delete沒有三種語法,它只有兩種,分別是delete operator和operator delete,也稱為delete表達式和delete操作符。delete表達式和new表達式對應,完成對象的析構和內存的釋放操作。而delete操作符只是用於內存的釋放,和C語言中的free相似。例如:
string* ps = new string("abc");
...
delete ps; //調用delete表達式,先析構再釋放
void* buffer = operator new(sizeof(string));
...
operator delete(buffer); //釋放
placement new是在指定位置初始化對象,也就是調用了構造函數,因此與之對應的就是析構函數了,只不過它不叫placementdelete而已。
void *pv = operator new(sizeof(vector<int>));
pv = new(pv) vector<int>(8, 0);
...
static_cast<vector<int>* >(pv)->~vector(); // call destruct function
operator delete(pv); // free memory
pv = NULL;
❾ C語言 VC中 new怎麼使用啊
在C語言中 我們必須使用malloc函數,因為C語言沒有new這個操作符,但是如果你的編譯器是C++的話,是可以使用new的.
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;
❿ 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]='