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

回调函数

回过头来调用的函数

#include <stdio.h>

#include <stdlib.h>

int Find_Max(int arr\[\], int n){

int max_value = arr0;

for (int i = 1; i < n; ++i){

if (max_value < arri)

max_value = arri;

}

return max_value;

}

int Find_Min(int arr\[\], int n){

int min_value = arr0;

for (int i = 1; i < n; ++i){

if (min_value > arri)

min_value = arri;

}

return min_value;

}

int main(){

int arr\[\] = { 5, 8, 9, 2, 3, 1, 0, 4 };

int n = sizeof(arr) / sizeof (arr0);

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 = arr0;

for (int i = 1; i < n; ++i){

if (max_value < arri)

max_value = arri;

}

return max_value;

}

int Find_Min(int arr\[\], int n){

int min_value = arr0;

for (int i = 1; i < n; ++i){

if (min_value > arri)

min_value = arri;

}

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 (arr0);

// 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",arri);

}

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 (arrj > arrj + 1){

int tmp = arrj;

arrj = arrj + 1;

arrj + 1 = tmp;

}

}

}

}

int main(){

int arr\[\] = { 5, 8, 9, 2, 3, 1, 0, 4 };

int n = sizeof(arr) / sizeof (arr0);

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",arri);

}

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 (arrj > arrj + 1){

int tmp = arrj;

arrj = arrj + 1;

arrj + 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 (arr0);

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(arr1)); // 1

printf("%d\n", sizeof(&arr)); // 4

printf("%d\n", sizeof(&arr0 + 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(arr1)); // 无

printf("%d\n", strlen(&arr)); // ?

printf("%d\n", strlen(&arr + 1)); // ?

printf("%d\n", strlen(&arr0 + 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(arr1)); // 1

printf("%d\n", sizeof(&arr)); // 4

printf("%d\n", sizeof(&arr0 + 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(arr1)); // 无

printf("%d\n", strlen(&arr)); // 6

printf("%d\n", strlen(&arr + 1)); // ?

printf("%d\n", strlen(&arr0 + 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(p0)); // 1

printf("%d\n", sizeof(&p)); // 4

printf("%d\n", sizeof(&p0 + 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(p0)); // 无

printf("%d\n", strlen(&p)); // ?

printf("%d\n", strlen(&p + 1)); // ?

printf("%d\n", strlen(&p0 + 1)); // 5

system("pause");

return 0;

}

总结:数组名的意义:

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

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

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

相关推荐
T1mzhou5 分钟前
ARM64 Linux 6.10 内核驱动(13):bus.c / driver.c 总线两张表,驱动怎么挂上去
linux·服务器·c语言·arm开发·arm
码行山野赴时序归途16 分钟前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
linx2951 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
wuminyu1 小时前
Kafka的写入延迟与磁盘IO抖动原理分析
java·linux·c语言·jvm·c++
aramae1 小时前
模拟实现strcpy(字符串拷贝)(C语言)
java·c语言·开发语言·算法
水饺编程2 小时前
第5章,[Win32 章节] :绘制平面直角坐标系
c语言·c++·windows·visual studio
白色的北极熊2 小时前
c 语言 输出矩形
c语言
估值探索者3 小时前
【AI+量化实战 #05】财报季的信息洪流:用LLM给业绩预告分类+算事件窗口收益
java·c语言·c++·人工智能·python·分类·数据挖掘
繁星蓝雨14 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
yutian060615 小时前
C: Unix UTC 时间戳转为 UTC+8 北京时间
c语言·unix