关于c语言中new的使用

#include<stdio.h>intmain(){intscore[][4]={{59,60,78,23},{78,65,63,54},{89,83,88,90}};... #include<stdio.h>
int main ()
{
int score[][4]={{59,60,78,23},{78,65,63,54},{89,83,88,90}};
int * seach(int(*pi)[4]);
int * p;
int i,j;
for(i=0;i<3;i++)
{
p=seach(score+i);
if(p==*(score+i))
{
printf("--------\n");
for(j=0;j<4;j++)
{
printf("%d ",*(p+j));
}
printf("\n");
}
}
return 0;
}
int * seach(int(*pi)[4])
{
int i=0;
int *pt;
pt=NULL;
for(;i<4;i++)
{
if(*(* pi+i)<60)
pt=*pi;
}
return (pt);
}
"int *pt;"这个是不是要写成"int *pt=new int;"
int *pt这个应该是局部指针变量我看书上说要用到new操作符来分配个持久空间。可在未使用new字符之前编译器并未报错或者出现乱码。 向高手请教······
展开
 我来答
大野瘦子
高粉答主

推荐于2019-10-25 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34万
展开全部

必须使用malloc函数,因为C语言没有new这个操作符,但是如果你的编译器是C++的话,是可以使用new的。

所以程序就是:

long *pNumber = (long*)malloc(sizeof(long) * 1000000);

开辟后就可以像数组一样使用它了,使用完后,一定要记得释放它,用free,像这样free(pNumber);使用new更方便。

代码:

long* pNumber = new long[1000000];

使用完后,使用delete[]

像delete[] pNumnber;

扩展资料:

总结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是在指定位置初始化对象,也就是调用了构造函数,因此与之对应的就是析构函数了,只不过它不叫placement delete而已。

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;

56butck10
推荐于2017-09-22 · TA获得超过253个赞
知道小有建树答主
回答量:446
采纳率:0%
帮助的人:94万
展开全部
在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;
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a399495
2011-06-30 · TA获得超过243个赞
知道答主
回答量:48
采纳率:100%
帮助的人:71万
展开全部
C语言申请空间的不是用new ,而是malloc。
C++才有new可以用。
你说的那个应该写成
int * pt = malloc ( sizeof (int) )
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式