欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 24/06/24(12.1117)指针进阶 ,冒泡和快排 习题为依托巩固概念(strlen,sizeof,字符串,数组,指针大小的区别)

24/06/24(12.1117)指针进阶 ,冒泡和快排 习题为依托巩固概念(strlen,sizeof,字符串,数组,指针大小的区别)

2025/3/26 8:37:47 来源:https://blog.csdn.net/2401_84919695/article/details/139930122  浏览:    关键词:24/06/24(12.1117)指针进阶 ,冒泡和快排 习题为依托巩固概念(strlen,sizeof,字符串,数组,指针大小的区别)

回调函数

回过头来调用的函数

#include <stdio.h>
#include <stdlib.h>

int Find_Max(int arr[], int n){
    int max_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (max_value < arr[i])
            max_value = arr[i];
    }
    return max_value;
}

int Find_Min(int arr[], int n){
    int min_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (min_value > arr[i])
            min_value = arr[i];
    }
    return min_value;
}
int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);

    printf("max_value = %d\n",Find_Max(arr,n));
    printf("min_value = %d\n",Find_Min(arr, n));
    system("pause");
    return 0;
}

怎么写出一个通用的函数,可以想查找最大就是最大,想查找最小就是最小

#include <stdio.h>
#include <stdlib.h>

int Find_Max(int arr[], int n){
    int max_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (max_value < arr[i])
            max_value = arr[i];
    }
    return max_value;
}

int Find_Min(int arr[], int n){
    int min_value = arr[0];
    for (int i = 1; i < n; ++i){
        if (min_value > arr[i])
            min_value = arr[i];
    }
    return min_value;
}
//
int Find(int arr[], int n, int(*pfun)(int arr[], int n)){//通用
    return pfun(arr, n);
}

int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);

  //  printf("max_value = %d\n",Find_Max(arr,n));
 //   printf("min_value = %d\n",Find_Min(arr, n));
     printf("max_value = %d\n",Find(arr,n,Find_Min));   

        system("pause");
    return 0;
}

只要是有函数参数里有函数参数当参数的就是回调函数.

冒泡排序:

#include <stdio.h>
#include <stdlib.h>

void PrintArr(int arr[], int n){
    for (int i = 0; i < n; i++){
        printf("%d",arr[i]);
    }
    printf("\n");
}
void bob(int arr[],int n){
    for (int i = 0; i < n - 1; i++){
        for (int j = 0; j < n - i - 1; j++){
            if (arr[j] > arr[j + 1]){
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }

        }
    }
}
int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);
    PrintArr(arr, n);
    bob(arr, n);
    PrintArr(arr,n);
    system("pause");
    return 0;
}

改成快速排序:

#include <stdio.h>
#include <stdlib.h>

void PrintArr(int arr[], int n){
    for (int i = 0; i < n; i++){
        printf("%d",arr[i]);
    }
    printf("\n");
}
void bob(int arr[],int n){
    for (int i = 0; i < n - 1; i++){
        for (int j = 0; j < n - i - 1; j++){
            if (arr[j] > arr[j + 1]){
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }

        }
    }
}
int comp_int(const void *a, const void *b){
    const int *pa = (const int*)a;
    const int *pb = (const int*)b;
    return (*pa - *pb);
}
int main(){
    int arr[] = { 5, 8, 9, 2, 3, 1, 0, 4 };
    int n = sizeof(arr) / sizeof (arr[0]);
    PrintArr(arr, n);
    //bob(arr, n);
    qsort(arr, n, sizeof(int), comp_int);
    PrintArr(arr,n);
    system("pause");
    return 0;
}

简单的概念强化:

#include <stdio.h>
#include <stdlib.h>


int main(){
    char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f', };

    printf("%d\n", sizeof(arr)); // 6
    printf("%d\n", sizeof(arr + 0)); // 4(一个地址的大小)
    printf("%d\n", sizeof(*arr)); // 1
    printf("%d\n", sizeof(arr[1])); // 1
    printf("%d\n", sizeof(&arr)); // 4
    printf("%d\n", sizeof(&arr[0] + 1)); //4 
    printf("%d\n", sizeof(&arr + 1)); // 4
    printf("%d\n", strlen(arr)); // ?(随机数)
    printf("%d\n", strlen(arr + 0)); //  ?
    printf("%d\n", strlen(*arr)); // 无(取的是一个字符,没法求字符串长度)
    printf("%d\n", strlen(arr[1])); // 无
    printf("%d\n", strlen(&arr)); // ?
    printf("%d\n", strlen(&arr + 1)); // ?
    printf("%d\n", strlen(&arr[0] + 1)); // ?

    system("pause");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>


int main(){
    char arr[] ="abcdef";

    printf("%d\n", sizeof(arr)); // 7
    printf("%d\n", sizeof(arr + 0)); // 4(一个地址的大小)
    printf("%d\n", sizeof(*arr)); // 1
    printf("%d\n", sizeof(arr[1])); // 1
    printf("%d\n", sizeof(&arr)); // 4
    printf("%d\n", sizeof(&arr[0] + 1)); //4 
    printf("%d\n", sizeof(&arr + 1)); // 4
    printf("%d\n", strlen(arr)); // 6
    printf("%d\n", strlen(arr + 0)); //  6
    //printf("%d\n", strlen(*arr)); // 无
    //printf("%d\n", strlen(arr[1])); // 无
    printf("%d\n", strlen(&arr)); // 6
    printf("%d\n", strlen(&arr + 1)); // ?
    printf("%d\n", strlen(&arr[0] + 1)); // 5

    system("pause");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>


int main(){
    char *p ="abcdef";

    printf("%d\n", sizeof(p)); // 4
    printf("%d\n", sizeof(p + 0)); // 4(一个地址的大小)
    printf("%d\n", sizeof(*p)); // 1
    printf("%d\n", sizeof(p[0])); // 1
    printf("%d\n", sizeof(&p)); // 4
    printf("%d\n", sizeof(&p[0] + 1)); //4 
    printf("%d\n", sizeof(&p + 1)); // 4
    printf("%d\n", strlen(p)); // 6
    printf("%d\n", strlen(p + 1)); //  5
    //printf("%d\n", strlen(*p)); // 无
    //printf("%d\n", strlen(p[0])); // 无
    printf("%d\n", strlen(&p)); // ?
    printf("%d\n", strlen(&p + 1)); // ?
    printf("%d\n", strlen(&p[0] + 1)); // 5

    system("pause");
    return 0;
}

总结:数组名的意义:

1.sizeof(数组名),这里数组名表示整个数组,计算的是整个数组的大小.

2.&数组名,这里的数组名表示整个数组,去除的是整个数组的地址.

3.除此之外所有的数组名都表示首元素的地址.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词