C語言(五 可變引數 排序問題)

2021-08-28 17:26:38 字數 1444 閱讀 5931

有時我們想呼叫乙個函式,卻又想給它傳不同數量的引數,c語言為我們提供了可變引數這個功能。

#include #include //要想使用可變引數,必須引入此標頭檔案

void cal(int num,...)

int main()

函式中第乙個引數代表後面引數的數量,後面的三個省略號定義了可變引數。

id函式及其描述

1void *calloc(int num ,int size) 在記憶體中動態分配num個長度為size的連續空間,並將每乙個位元組都初始化為0

2void free (void *address) 釋放指標address指向的記憶體塊,釋放的是動態分配的記憶體

3void *malloc(int num) 在堆區分配制定大小的記憶體空間,不進行初始化

4void *realloc(void *address, int newsize) 重新分配記憶體,記憶體大小擴充套件到newsize

在程式退出後系統會自動釋放分配的記憶體,但是要在不需要記憶體或要增大記憶體空間時,要realloc或free掉記憶體。

1、氣泡排序

重複得比較相鄰兩個變數的大小,每次確定剩餘元素中的最小(大)變數。

#include void swap(int arr,int len)

}} }

int main();

int len = (int)sizeof(arr)/sizeof(*arr); //sizeof(arr)表示陣列arr所佔記憶體大小,siazeof(*arr)表示陣列arr中第乙個元素的記憶體大小,整個表示式就是陣列的長度。

swap(arr,len);

int i;

for(i=0;i2、選擇排序

選擇排序就是每次從剩下的所有元素中選出最小(大)的元素按順序排列。

#include void swap(int *a,int *b)

void selection_sort(int arr, int len)

}

3、插入排序

插入排序是一種簡單直觀的排序方法,通過構建有序列表,將未排序數列從後向前掃瞄,將元素插入到合適的位置,已排序的元素可能會不斷向後挪位,為新元素空出位置。

void insertion_sort(int arr, int len)

}

4、希爾排序

希爾排序可以說是插入排序的公升級版,利用增量遞減排序,首先初始增量我們設為陣列長度除以2,也就是希爾增量,每個迴圈增量都減半。

void shellsort(int arr, int len)		

arr[j + increment] = temp; }

}}

c 語言可變引數

1 當無法列出傳遞函式的所有實參的型別和數目時,可用省略號指定參數列 void foo void foo parm list,2 函式引數的傳遞原理 函式引數是以資料結構 棧的形式訪問,從右至左入棧.eg include void fun int a,int main output 12 343 獲...

c語言可變引數

ifdef debug print info x printk x,else print info x endif 一 什麼是可變引數 我們在c語言程式設計中有時會遇到一些引數個數可變的函式,例如printf 函式,其函式原型為 int printf const char format,它除了有乙個...

C語言可變引數

在gnu c中,巨集可以接受可變數目的引數,就象函式一樣,例如 1 2 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 1 voidprintf...