Ⅰ 在c语言中malloc,free,new,del,
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语言编程】写一个函数del,删除动态链表中指定的结点
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
typedef struct node //定义节点
{
int value;
struct node* next;
}note;
note* head = NULL;
void del (note** head, int k)//删除链表
{
note* pp;
note* pt;
note* pq;
pp = *head;
if ((*head)->value == k)//如果头结点的值等于k,删除头结点
{
*head = (*head)->next;
return;
}
while(pp->value != k)
{
pt = pp;
pq = pp->next;
pp = pq;
}
pt->next = pp->next;//删除结点
}
void insert(note** head, int q)//建立链表
{
note* pp;
note* pt;
note* p = (note*)malloc(sizeof(note));
p->value = q;
p->next = NULL;
pp = *head;
if (*head==NULL)
{
*head=p;
return;
}
while(pp->next!=NULL)
{
pt = pp->next;
pp = pt;
}
pp->next = p;
}
void print(note* head)//打印链表
{
note* pp;
while(head!=NULL)
{
printf("%d ", head->value);
pp = head->next;
head = pp;
}
}
int main()
{
int i;
int n,k,value;
scanf("%d %d",&n, &k);
for(i=0; i<n; i++)
{
scanf("%d", &value);
insert(&head, value); //把head的地址传过去
}
del(&head, k);
print(head);
getch();//随意按个键退出界面
return 0;
}
Ⅲ C语言:编写函数DelNumber删除指针p所指向的字符串中的所有数字
可以遍历这个字符串
然后使用isdigit函数判断字符是否为数字
如果不是将其保存在一个缓冲区中
遍历完后再用这个缓冲区替换指针中的数据
下面是一个简单的代码
#include<stdio.h>
#include<ctype.h>
#include<string.h>
voidDelNumber(char*p)
{
charbuf[512];
char*p1=p;
char*p2=buf;
while(*p)
{
if(!isdigit(*p))
{
*p2=*p;
++p2;
}
++p;
}
*p2='