【斯坦福大学公开课】编程范式_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11441137jY?p=4&spm_id_from=pageDriver如何在不care变量类型的情况下实现swap函数
// 将字符串复制到数组 dest 中
#include
#include
#include
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
//写法1
int x = 17, y = 37;
swap(&x, &y);
printf("%d", x);
//写法2
int* a = &x, * b = &y;
swap(a, b);
printf("%d", x);
return(0);
}
为何两种写法都可以?
指针是一个unsigned类型的整数,此处需要传入待交换两数的地址。当你传入&x或者a时,它们表示的都是x变量的地址,所以都符合要求。
void *memcpy(void *str1, const void *str2, size_t n)
strdup函数原型:
strdup()主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s不相干。strdup函数复制一个字符串,使用完后要记得删除在函数中动态申请的内存,strdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该函数包括了strlen函数,而该函数参数不能是NULL。
// 将字符串复制到数组 dest 中
#include
#include
#include
#include
void swap(void* vp1, void* vp2, int size) {
//1. 动态分配数组空间
//char* buffer;// char数组每个占一字节,一共size字节
//buffer = (char*)calloc(size, sizeof(char));
char* buffer = (char*)malloc(size * (sizeof(char)));
//2. 复制内存内容
memcpy(buffer, vp1, size);// 对vp1解引用,得到它所指向的值,将该值复制到buffer
memcpy(vp1, vp2, size);
memcpy(vp2, buffer, size);
}
int main() {
int x = 17, y = 37;
swap(&x, &y, sizeof(int));
printf("%d\n", x);
char x1 = 'a', x2 = 'b';
swap(&x1, &x2, sizeof(char));
printf("%c\n", x1);
bool f1 = true, f2 = false;
swap(&f1, &f2, sizeof(char));
printf("%d\n", f1);
char* husband = _strdup("Fred");
char* wife = _strdup("Willa");
// swap(husband, wife, sizeof(char*));// 交换char*里面的值 Will
// swap(husband, &wife, sizeof(char*));// 交换char*里面的值 Crush
swap(&husband, &wife, sizeof(char*));// 交换char*里面的值
printf("%s\n", husband);
return(0);
}
int memcmp(const void *buf1, const void *buf2, unsigned int count);
比较内存区域buf1和buf2的前count个字节。
// 将字符串复制到数组 dest 中
#include
#include /#include
//#include
void *_lsearch(void* key, void* base, int n, int elemSize) {
for (int i = 0; i < n; i++) {
void* elemAddress = (char*)base + i * elemSize;
if (memcmp(key, elemAddress, elemSize) == 0) return elemAddress;
}
return NULL;
}
int main() {
int a[] = { 1,3,5,7 };
int key1 = 13;
int* find1 = NULL;
find1 = _lsearch(&key1, a, sizeof(a) / sizeof(int), sizeof(int));
printf("address of key1 is:%p\n", find1);
char c[] = { 'a','b','c' };
char key2 = 'c';
char* find2 = NULL;
find2 = _lsearch(&key2, c, sizeof(c) / sizeof(char), sizeof(char));
printf("address of key2 is:%p", find2);
}
//可查看float中元素的地址如何排列
void main() {
float a[] = { 1.2,4.5,7.99,8.0 };
float key1 = 1.2;
float* find1 = NULL;
find1 = _lsearch(&key1, a, sizeof(a) / sizeof(float), sizeof(float));
printf("%p\n", find1);
float key2 = 4.5;
float* find2 = _lsearch(&key2, a, sizeof(a) / sizeof(float), sizeof(float));
printf("%p", find2);
return 0;
}
方法元素c语言范式编程之lsearch - xinyuyuanm - 博客园 (cnblogs.com)https://www.cnblogs.com/xinyuyuanm/archive/2013/05/04/3060055.html