首页 > 其他分享 >指针进阶6

指针进阶6

时间:2022-11-05 17:33:26浏览次数:52  
标签:arr 进阶 int void 地址 printf sizeof 指针

#define _CRT_SECURE_NO_MARNINGS 1
//qsort函数的复习
//#include<stdio.h>
//#include<stdlib.h>//qsort函数的函数引用是#include<stdlib.h>
//int main()
//{
// void qsort(void* base, size_t num,size_t width,int( * compare)(const void* eem1, const void* elem2));
// //第一个参数:待排序数组的首元素地址
// //第二个参数:待排序数组的元素个数
// //第三个参数:待排序数组的每个元素的大小—当个字节(sizeof函数可求)
// //第四个参数:是函数指针,比较两个元素的所用函数的地址—这个函函数使用者自己实现
// //函数指针的两个参数是:待比较两个元素的地址
// return 0;
//}
//利用qsort函数实现的冒泡排序优化(原因:之前的冒泡排序未能实现排序各种类型元素)
//回调函数的使用
//目的:实现多种类型数据的比较
//#include<stdlib.h>
//#include<stdio.h>
//#include<string>
//struct stu
//{
// char name[20];
// int age;
//};
//int cmp_sturst_by_name( void* e1, void* e2)
//{
// //比较名字的比较字符串
// //字符串比较不能直接用><=来比较,应该用strcmp函数(头文件为#include<string.h)比较;
//
// return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
//}
//int cmp_sturst_by_age(void* e1, void* e2)
//{
// return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
//}
//int cmp_int(void* e1,void* e2)
//{
// //两个整形值比较
// return *(int*) e1 - *(int*) e2;
//}
//void Swap(char* buf1, char* buf2,int wibth)
//{
// int i = 0;
// for (i = 0; i < wibth;i++)
// {
// char tmp = *buf1;
// *buf1 = *buf2;
// *buf2 = tmp;
// *buf1++;
// *buf2++;
// }
//}
////实现bubble_sort函数的程序员,他是否知道未来排序的数据类型————不知道
////那程序员也不知道,待比较的两个元素的类型
//void bubble_sort(void*base,int sz, int width,int(*cmp_int)(void* e1,void* e2))//冒泡排序函数
//
//{
// int i = 0;
// //趟数
// for (i = 0; i < sz; i++)
// {
// //每一趟比较的对数
// int j = 0;
// for (j = 0; j < sz - 1 - i; j++)
// {
// //两个元素的比较
// if (cmp_int((char*)base + j * width,(char*)base + (j + 1) * width) > 0)
// {
// //交换
// Swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
// }
// }
// }
//}
//void test1()
//{
// int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);
// //使用bubble_sort的程序员一定知道自己排序的是什么数据
// //就应该知道如何比较待排序数组中的元素
// for (int i = 0; i < 10; i++)
// {
// printf("%d ", arr[i]);
// }
//
//}
//void test2()
//{
// struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
// int sz = sizeof(s) / sizeof(s[0]);
// bubble_sort(s, sz, sizeof(s[0]), cmp_sturst_by_age);//bubble_sort相当于qsort
// bubble_sort(s, sz, sizeof(s[0]), cmp_sturst_by_name);
//}
//int main()
//{
// test1();
// test2();
// return 0;
//}



//题目

//#include<stdio.h>
//#include<string>
//int main()
//{
// //整型数组
// //int a[] = { 1,2,3,4 };//int类型的大小为4
// //printf("%d \n", sizeof(a));//16---sizeof(数组名)中的数组名表示整个数组的地址而数组 a 中有四个元素且每个元素为int类型,且int类型的大小为四个字节所以结果为16
// //printf("%d \n", sizeof(a+0));//4/8——数组名这里表示首元素的值,a+0还是首元素地址,首元素地址大小为4/8
// //printf("%d \n", sizeof(*a));//4/8——数组名表示首元素地址,所以*a就是解引用出数组首元素地址,地址大小为4/8
// //printf("%d \n", sizeof(a+1));//4/8——数组名表示首元素大小,a+1则表示第二个元素的地址,大小为4/8
// //printf("%d \n", sizeof(a[1]));//4/8——a[1]表示第二个元素
// //printf("%d \n", sizeof(&a));//4/8——&a表示取数组地址-但是数组地址也是地址-数组地址的大小为4/8
// //printf("%d \n", sizeof(*&a));//16——&a表示数组地址,然后解引用*&a访问的数组,sizeof计算的就是数组大小的单位字节
// //printf("%d \n", sizeof(&a+1));//4/8——&a+1表示跳过整个数组地址后的地址,同样也是数组地址大小也是4/8
// //printf("%d \n", sizeof(&a[0]));//4/8——&a[0]表示第一个元素的地址
// //printf("%d \n", sizeof(&a[0]+1));//4/8——&a[0]表示第二个元素的地址
//
////字符型strlen--求长度到“\0”停止 sizeof---求大小
// char arr[] = {'a','b','c','d','e','f'};
//
// //printf("%d \n", sizeof(arr));//6
// //printf("%d \n", sizeof(arr+0));//4/8——数组名这里表示首元素的值,a+0还是首元素地址,首元素地址大小为4/8
// //printf("%d \n", sizeof(*arr));//1--数组名这里表示首元素的值,a+0还是首元素地址,首元素地址大小为1
// //printf("%d \n", sizeof(arr[1]));//1
// //printf("%d \n", sizeof(&arr));//4/8——&arr表示取数组地址-但是数组地址也是地址-数组地址的大小为4/8
// //printf("%d \n", sizeof(&arr+1));//4/8——&arr+1表示跳过整个数组地址后的地址,同样也是数组地址大小也是4/8
// //printf("%d \n", sizeof(&arr[0]+1));//4/8——&a[0]表示第二个元素的地址
// //printf("%d \n", sizeof(&arr[0] + 3));//4/8
//
//
//
// //printf("%d \n", strlen(arr));//随机值--由于arr数组中最后没有“\0”所以一直没有停止
// //printf("%d \n", strlen(arr + 0));//随机值
// //printf("%d \n", strlen(*arr));//错误写法(err)
// //printf("%d \n", strlen(arr[1]));//err
// //printf("%d \n", strlen(&arr));//随机值
// //printf("%d \n", strlen(&arr + 1));//随机值-6
// //printf("%d \n", strlen(&arr[0] + 1));//随机值-1
//
// return 0;
//}
//


标签:arr,进阶,int,void,地址,printf,sizeof,指针
From: https://blog.51cto.com/u_15812356/5826042

相关文章