C语言入门三
数组
1 什么是数组
数组表示相同类型的数据集合,是聚合类型
2、数组存放在哪个位置??
方法内
3、数组什么时候确定大小?
编译时
4、什么时候给数组分配内存??
程序运行时
5、最多分配多大的内存?
栈的大小 1M-2M
6 定义数组
int arr[5] = {1,2,3,4,5}//5为数组长度
数组初始化只有一次机会即在定义数组的时候
功能函数中传参数若为数组,可使用指针
void Show(int *p)
{
}
int main()
{
int arr[5] = {1,2,3,4,5};//20
Show(arr);//地址 数组首元素的地址
}
7、&arr+1;//数组最后一个元素的后面
访问数组当中元素的方法:
可以通过下标去访问 //arr[1]
通过指针的形式访问
nt *p = arr;
int a = *(p+3);//访问
8 数组的地址
int arr[5] = {10,2,3,4,5};
printf("%d\n",&arr);,//首地址
printf("%d\n",&arr+1);//整个数组+1的地址
printf("%d\n",&arr[0]);//arr[0]的地址
printf("%d\n",&arr[4]);//4号下标的地址
printf("%d\n",arr);//首地址
printf("%d",arr[2]);//2号下标的值
9 求数组的长度
int len = sizeof(arr)/sizeof(arr[0]);
10,字符数组
char crr[5] = {'a','b','c','d','e'};//字符数组
char crr2[5] = "abcd";//字符数组 默认会加\0
char crr3[] = "abcdef";//字符数组 默认会加\0
char crr4[10] = "abcdef";
printf("%s\n",crr);
printf("%s\n",crr2);
printf("%s\n",crr3);
printf("%s\n",crr4);
字符串使用%s进行打印
%s:遇到\0停止
其中printf("%s\n",crr) 因为没有\0来停止 所以打印结果如上图
其他知识
1 sizeof与strlen
sizeof:
关键字,用来求字节长度 不会计算 \0
注意,用sizeof求指针字节数时 全为4
strlen:
库函数需头文件#include<string.h>
用来求字符串的长度,但是不包括\0
char str[100] = "abcdef";
char *str2 = "abcdef";
char str3[] = "abcdef";
char str4[100] = "abcdef\0xyz";
char *str5 = "abcdef\0xyz";
char str6[] = "abcdef\0xyz";
char str7[] = "abcdef\n\0";
char *str8 = "abcdef\n\0";
printf("%d,%d\n",sizeof(str),strlen(str));
printf("%d,%d\n",sizeof(str2),strlen(str2));
printf("%d,%d\n",sizeof(str3),strlen(str3));
printf("%d,%d\n",sizeof(str4),strlen(str4));
printf("%d,%d\n",sizeof(str5),strlen(str5));
printf("%d,%d\n",sizeof(str6),strlen(str6));
printf("%d,%d\n",sizeof(str7),strlen(str7));
printf("%d,%d\n",sizeof(str8),strlen(str8));
printf("%d,%d\n",sizeof(str3),strlen(str3));
2,断言 assert
断言是一个宏 需要#include<assert.h>头文件
适用于DEBUG版本
void assert( int expression );
果expression的值为假(即为0),那么它先打印一条出错信息,然后终止程序运行。