Ⅰ 在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='