memset
memset的作用就是将 arr 的前六个字符改变成#或者其它设置的
#include<stdio.h>
#include <string.h>//memset
int main()
{
char arr[] = "hello world";
memset(arr, '#', 6);
//memset的作用就是将 arr 的前六个字符改变成#或者其它设置的
printf("%s\n", arr);
return 0;
}
strcpy
#include<stdio.h>
#include<string>//strcpy
int main()
{
char arr1[] = "bit";
char arr2[20] = "#######";
strcpy(arr2, arr1);
//这里的arr2意思拷贝的目的,arr1的意思是拷贝的源头
//这里结合起来的意思就是将arr1的内容拷贝到arr2当中去
printf("arr2 = %s\n", arr2);
return 0;
}
利用函数交换a和b
#include<stdio.h>
void Add(int* pa,int *pb)
{
int tmp = 0;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("交换前a=%d b=%d\n", a, b);
Add(&a, &b);
printf("交换后a=%d b=%d\n", a, b);
return 0;
}
函数的调用
传值调用: 函数的形参和实参分别占有不同内存块,
对形参的修改不会影响实参
传址调用:
1.传址调用是把函数外部创建变量的内存地址,传递给
函数参数的一种调用函数的方式
2这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量
写一个函数判断这个数是不是素数
素数判断是2->n-1个数全部除一遍都算出是素数才是
#include<stdio.h>
int is_prime(int n)
{
//素数判断是2->n-1个数全部除一遍都算出是素数才是
int j = 0;
for (j = 2; j < n; j++)
{
if (n%j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
//打印100-200之间的素数
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
printf("%d ", i);
}
return 0;
}
判断1000-2000之内是闰年的
#include<stdio.h>
int is_leep_year(int x)
{
if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int i = 0;
for (i = 1000; i <= 2000; i++)
{
if (is_leep_year(i) == 1)
{
printf("i=%d\n", i);
}
}
return 0;
}
1.二分查找
2.在一个有序数组中查找具体的某个数
3.如果找到了返回这个数的下标,找不到的返回-1
#include<stdio.h>
//本质上arr是一个指针
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;//中间元素的下标
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
/*二分查找
在一个有序数组中查找具体的某个数
如果找到了返回这个数的下标,找不到的返回-1*/
int arr[] = {
1, 2, 3, 4, -5, 6, 7, 8, 9, 10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);//sz数组最右侧下标
int ret = binary_search(arr, k, sz);
if (ret == -1)
{
printf("找不到这个数\n");
}
else
{
printf("找到了这个数下标是%d\n", ret);
}
return 0;
}
写一个函数,每调用一次这个函数,就会将num的值加1
#include<stdio.h>
void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("num=%d\n", num);
Add(&num);
printf("num=%d\n", num);
Add(&num);
printf("num=%d\n", num);
}
函数链式访问:把一个函数的返回值作为另一个函数的参数
#include<stdio.h>
int main()
{
printf("%d",printf("%d",printf("%d",43)));
//这里的打印结果是4321
//因为这里首先打印43,然后调用printf这个函数它的返回值是打印元素个数
//所以第二个printf打印的就是2,然后在调用printf,它的返回值是打印的元素
//个数所以就是1,所以结果就是4321
return 0;
}