C语言基础十


malloc函数用于从堆中分配连续多个字节,如果失败则返回NULL。为了使用这个函数需要包含头文件stdlib.h。
free函数可以释放堆中分配的连续多个字节,需要首字节地址作为参数。
calloc函数也可以从堆中分配连续多个字节,失败也返回NULL。这个函数保证把分配到的变量清0。
realloc函数可以调整堆中变量的个数。

可以使用关键字const声明指针变量,
const int *p_value
这样声明的指针变量不能用来修改对应的整数变量内容
int * const p_value
这样声明的指针变量只能在初始化的时候被赋值一次,以后就不可以再被赋值了。

二级指针用来记录一级指针的地址,声明方法如下
int **pp_value = NULL;
其中**表示二级指针类型
*pp_value表示一级指针变量,**pp_value表示普通变量

函数名称可以代表函数的地址
函数指针变量可以记录函数地址,声明方法如下
int (*p_add)(int, int);
函数指针变量可以用来调用函数

qsort函数可以实现对数组中所有数据从小到大排序的功能,需要一个函数地址用来比较数组中两个数字之间的大小关系。






/*
	malloc练习
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
    //int value = 0;
    int *p_value = (int *)malloc(sizeof(int));
	 if (p_value) {
        *p_value = 3;
		  printf("数字是%d\n", *p_value);
		  free(p_value);
		  p_value = NULL;
	 }
    return 0;
}



/*
	malloc练习
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
    int loop = 0;
    int *p_value = malloc(4 * sizeof(int));
	 if (p_value) {
        for (loop = 1; loop <= 4; loop++) {
          // *(p_value+4 - loop) = loop;
             p_value[4-loop] = loop;

		  }
		  for (loop = 0; loop <= 3; loop++) {
            printf("%d ", *(p_value + loop));
		  }
		  printf("\n");
		  free(p_value);
		  p_value = NULL;
	 }
    return 0;
}


/*
    malloc练习
*/
#include <stdio.h>
#include <stdlib.h>
int *read() {
    /*int value = 0;
	 return &value;*/
    return (int *)malloc(sizeof(int));
}
int main() {
    int *p_value = read();
    if (p_value) {
        *p_value = 3;
		  printf("数字是%d\n", *p_value);
		  free(p_value);
		  p_value = NULL;
	 }
    return 0;
}



/*
	calloc练习
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
    int *p_value = calloc(1, sizeof(int));
	 if (p_value) {
        printf("数字是%d\n", *p_value);
		  free(p_value);
		  p_value = NULL;
	 }
    return 0;
}



/*
	realloc练习
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
    int loop = 0;
    int *p_value = malloc(4 * sizeof(int));
	 if (p_value) {
        for (loop = 5; loop <= 8; loop++) {
            *(p_value + loop - 5) = loop;
		  }
		  int *p_value1 = realloc(p_value, 6 * sizeof(int));
		  if (p_value1) {
            p_value = p_value1;
		  }
		  p_value1 = NULL;
		  for (loop = 0; loop <= 3; loop++) {
            printf("%d ", *(p_value + loop));
		  }
		  printf("\n");
		  free(p_value);
		  p_value = NULL;
	 }
    return 0;
}


/*
	const指针练习
*/
#include <stdio.h>
int main() {
    int value = 4;
	 //int *p_value = NULL;
	 //const int *p_value = NULL;
	 int * const p_value = NULL;
	 p_value = &value;
	 *p_value = 7;
    return 0;
}

/*
	const指针练习
*/
#include <stdio.h>
int sum(const int *p_value, int num) {
    int loop = 0, result = 0;
	 for (loop = 0; loop <= (num - 1); loop++) {
        //*(p_value + loop) = 0;    编译错误
        result += *(p_value + loop);
	 }
	 return result;
}
int main() {
    int values[] = {4, -2, 9, -4}, loop = 0;
	 int result = sum(values, 4);
	 printf("求和结果是%d\n", result);
	 for (loop = 0; loop <= 3; loop++) {
        printf("%d ", values[loop]);
	 }
	 printf("\n");
    return 0;
}


/*
	 函数指针练习
*/
#include <stdio.h>
int add(int x, int y) {
    return x + y;
}
int main() {
    int (*p_func)(int, int);
	 typedef int (*t_func)(int, int);
	 t_func p_func1 = add;
    printf("add是%p\n", add);
	 p_func = add;
	 printf("p_func(2, 3)是%d\n", p_func(2, 3));
	 printf("p_func1(2, 3)是%d\n", p_func1(2, 3));
    return 0;
}


/*
	函数指针练习
*/
#include <stdio.h>
int mul(int x, int y) {
    return x * y;
}
int div(int x, int y) {
    return x / y;
}
int main() {
    int (*p_func)(int, int) = NULL;
	 p_func = mul;
	 printf("p_func(10, 2)是%d\n", p_func(10, 2));
	 p_func = div;
	 printf("p_func(10, 2)是%d\n", p_func(10, 2));
    return 0;
}





/*
	qsort练习
*/
#include <stdio.h>
#include <stdlib.h>
int compare(const void * p_value, const void * p_value1) {
    int *p_int1 = (int*)p_value;
	 int *p_int2 = (int*)p_value1;
	 if (*p_int1 > *p_int2) {
        return 1;
	 }
	 else if (*p_int1 < *p_int2) {
        return -1;
	 }
	 else {
        return 0;
	 }
}
int compare1(const void * p_value, const void * p_value1) {
    return 0 - compare(p_value, p_value1);
}
int main() {
    int values[] = {7, -3, 5, 1, 4}, loop = 0;
	 qsort(values, 5, sizeof(int), compare);
	 for (loop = 0; loop <= 4; loop++) {
        printf("%d ", values[loop]);
	 }
	 printf("\n");
	 qsort(values, 5, sizeof(int), compare1);
	 for (loop = 0; loop <= 4; loop++) {
        printf("%d ", values[loop]);
	 }
	 printf("\n");
    return 0;
}






你可能感兴趣的:(c)