c语言new一个函数 c语言的new语句

c语言这new是什么作用

new是C++中用于动态内存分配的运算符,在C语言中一般使用malloc函数。

创新互联公司专注于企业全网营销推广、网站重做改版、离石网站定制设计、自适应品牌网站建设、H5页面制作电子商务商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为离石等各大城市提供网站开发制作服务。

有三种用法:new operator、operator new、placement new

1)new operator:

new operator是最常见的用法,如 Emp* e1 = new Emp;(Emp是一个类) 这里new有两种作用:分配空间、初始化对象(调用了构造函数)

2)operator new:

operator new作用是只分配空间,不调用构造函数,如:Emp* e2 = (Emp*)operator new(sizeof(Emp));

3)placement new:

placement new作用是在已分配好的空间上初始化对象,不分配空间,调用拷贝构造函数,如:new ((void *)e2) Emp(*tb1);

c语言编写函数newcopy(char *new,char *old)

newcopy函数没什么问题。

主函数有问题。

#includestdio.h

void newcopy(char *new,char *old);

void main(){

char *new,*old,a[1000];

int m,j;

//printf("要输入多少个字符:");//这里是没意义的。 输入字符个数不需要说明。 如果是多个字符串,那么下面循环要包含到输出部分。 

//scanf("%d",m);

printf("请输入字符串:");

//for(j=0;jm;j++)

gets(a);

old=a;

new=a;

newcopy(new,old);

printf("输出运行后的字符串:%s\n",a);

}

void newcopy(char *new,char *old){

int j=0;

for(;*old!='\0';++old)

if((*old)'z'||(*old)'a')

{

*(new+j)=*old;

j++;

}

*(new+j)='\0';

}

C语言:编写一个函数new 对n个字符开辟连续的存储空间

在纯粹C编译器下,用new作函数名是可以的,但在与C++兼容的编译器下,是不可能通过编译的,因为new是C++的申请内存操作符,属保留字,不能由用户用作标识符。这里将new改为mynew,举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

char *mynew(int n){

char *p;

if(p=(char *)malloc(n))

return p;

else return NULL;

}

int main(void){    

char *p=mynew(20);//申请20个连续字节空间

if(p){//若申请成功

strcpy(p,"1234567890");//向申请的空间写入字符串

printf("%s\n",p);//打出来看看

free(p);//释放申请的空间

}

else printf("Application memory failure...\n");

return 0;

}

在C语言中怎样定义一个新的函数

C语言中一个完整的函数由函数首部和函数体构成,而且定义函数时两者都是必不可少的。

函数定义的一般形式如下:

类型标识符

函数名(形参表列)

//

这是函数首部

//

以下{

}内的是函数体

{

说明部分

执行部分

}

举例说明如下:

// 定义一个不带返回值的函数

// 函数功能:输出形参的值

void fun(int a, int b)

{

printf("%d, %d\n", a, b);

}

// 定义一个带返回值的函数

// 函数功能:返回2个整数数的最大值

int fun(int a, int b)

{

return ab ? a : b;

}

C语言的new函数和free函数问题

首先是new函数的疑问,*newp是newbuf数组的首地址,那是不是不管newp变成了什么都会指向newbuf首地址,那么if判断是不是永远都是成立的?

并不是. 注意newp在申请成功时,是newp+=n;

也就是根据申请的n值, 每次newp是移动的, 比如, 先申请了500个字节,那么此时newp=newbuf+500, 再申请512个字节,就会导致判断不成立,返回NULL.

同时,即使是newp=newbuf时, 如果n大于1000, 那么一样会返回NULL.

然后是free函数的问题,是不是就是从p开始放入newbuf数组,使p之后的1000个位置都是空白的,以此达到清除内存的目的?

这里其实是让newp指向p, 也就是使得从p开始的内存又可以分配了.

对于free函数,参数p必须是new返回的值. 至于这个函数的详细功能,不需要深究,因为它是有问题的.

如果多次申请内存后, 再逐一释放,这个程序就会乱掉了.


网站名称:c语言new一个函数 c语言的new语句
本文地址:http://pwwzsj.com/article/hpocii.html