1.基础知识
- 数组有类型 eg:int arr[10] 数组类型是int[10];
- 数组名不需要取地址符号(arr),数组元素(arr[5])要&
- %p ——地址
- 定义二维数组的行可以省略,列不可以省略 eg:arr[ ][ 5 ];
2.sizeof计算数组元素个数
sizeof(arr)算出的是字节数。
可以用总字节数 / 单位字节数 来计算元素个数
sz=sizeof(arr)/sizeof(arr[0]);
//用sizeof计算元素个数
3.C99中的变长数组
可以使用变量指定数组大小。变长数组不能初始化,数组长度只有在运行时才确定.
注意:输入n后,数组长度会确定,后面不会更改。
int n=0;
scanf("%d",&n);
int arr[n];//gcc支持
4.练习
4.1字符串从两端向中间移动
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "hello world!!!!!";
char arr2[] = "################";
int left = 0;
int right = strlen(arr1)-1;
while(left<=right)
{
arr2[left] = arr1[left]; //替换思想
arr2[right] = arr1[right];
printf("%s\n",arr2);
left++;
right--;
}
}
4.2二分查找
前提:数据是有序的
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
scanf("%d",&k);
int sz = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = sz-1;
while (left <= right)
{
int mid = (left + right) / 2;
if(arr[mid] < k)
{
left = mid + 1;
}
else if(arr[mid] > k)
{
right = mid - 1;
}
eles
{
printf("找到了,下标是%d\n",mid);
break;
}
}
if(left > right)
{
printf("找不到\n");
}
return 0;
}
5.自定义函数
语法形式
//函数定义
返回类型 函数名 (形参) --->可以是0个或 多个
{
}
6.链式访问
将一个函数的返回值作为另一个函数的参数
#include<stdio.h>
int main()
{
printf("%d",printf("%d",printf("%d",43)));
}
//输出:4321
int r = printf("hehe");
printf("%d\n",r);
//输出:hehe4
printf 的返回值是打印字符总个数
7.函数的声明和定义
先声明后定义。
8.static和extern
static是静态的意思,可以用来:
修饰局部变量,修饰全局变量,修饰函数
extern是用来声明外部符号。