目录
数组
特点:
内存连续 数据类型相同
分类:
按元素的类型分类
字符数组 char 组名[];
短整型、整型、长整型的数组 short int 组名[]、int 组名[]、long int 组名[];
浮点型的数组(单、双) float 组名[]; double 组名[];
指针数组 char *组名[] int *组名[];
结构体数组 struct 组名[];
按维数分类
一维数组
二维数组
多维数组
一维数组
格式:存储类型数据类型数组名[元素个数]
int arr[5];
例:inta[5]={2,3,5,8,9};
a[0]------2 a[1]------3 a[2]------5 a[4]------9
访问时,索引从0开始
chara[5]={'q','w','e'};
数组名
也是数组首地址
a[6]={}
printf("%p",a); //取数组首地址
字节大小
inta[5]; 4*5=20
printf("%d",sizeof(a));
初始化
完全初始化
inta[5]={2,3,5,8,9};
部分初始化
inta[5]={9};未初始化部分值为0
intarr[66]={};
未初始化
intb[33];未初始化部分值为随机值
b[0]=9;
循环遍历
int a[5]={};
for(int j=0;j<5;j++)
scanf("%d",&a[j]);
for(int i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
内存分配
int a[5]={2,3,4,5,6};
for(int i=0;i<5;i++)
printf("%p\n",&a[i]);
清零函数
bzero
#include <strings.h>
void bzero(void *s, size_t n);
功能:清空数组
参数:数组首地址,n:清空的字节大小
返回值:
int a[5]={2,3,4,5,6};
bzero(a,20); // bzero(a,sizeof(a));
memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:清空数组
参数:数组首地址,c:替换的数据(一般取0),n:清空的字节大小
返回值:数组首地址
int a[5]={2,5,6,4,3};
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
printf("%d\n",a[i]);
属性:替换数据为1时:
int 4字节 按字节赋值 0000 0001 0000 0001 0000 0001 0000 0001(十进制16,843,009)
字符数组
字符数组存放字符串
hello --- char c[6]={'h','e','l','l','o'};
字符串结束标志'\0'
① char a[6]={"hello"}; //sizeof(a) 6
② char b[6]="hello"; // 6
③ char c[]="hello"; //6char d[33]="hello"; //33
char a1[]={'a','b','c'}; //数据类型是字符型,sizeof(a1)==3
char a2[]={"abc"}; //数据类型是字符串,sizeof(a2)==4 '\0'
输入输出
输入:
1. for
char a[6];
for(int i=0;i<6;i++)
scanf("%c",&a[i]);
2. char a[33];
scanf("%s",a);//不支持空格
3.
char *gets(char *s);
功能:从终端输入字符串
参数:目标字符串的首地址
返回值:目标字符串的首地址
char a[33];
gets(a);
注意
scanf("%s",a);//hello world
printf("%s\n",a);//hello
scanf遇到空格或回车时会认为输入结束,如果想支持空格的写法,可以用:scanf("%[^\n]",a);
输出:
1.for
char a[6]={"hello"};
for(int i=0;i<6;i++)
printf("%c ",a[i]);
2.
char a[]={"hello world"};
printf("%s\n",a);
3. int puts(const char *s);
功能:向终端输出字符串
参数:字符串首地址
返回值:输出字符个数
char a[33];
gets(a);
puts(a);
练习:输入一串字符,计算其中空格个数
例题:判断对错
char s[10]={};
1)s[10]="hello"; ×
2)s="hello"; ×
3)strcpy(s,"string")
计算字符串实际元素个数
int i;
for(i=0;a[i]!='\0';i++);
printf("%d\n",i);
string.hstrlen
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串实际元素个数
参数:字符串首地址
返回值:实际元素个数
char a[33];
scanf("%[^\n]",a);
int res=strlen(a);
printf("%d\n",res);
sizeof和strlen的区别:
1. sizeof是关键字,strlen是函数
2. sizeof计算实际开辟的空间大小,strlen计算字符串实际元素个数
3. sizeof计算包括'\0',strlen不包括,chara[]="hello";