二维数组
1.概念:用来存储一组数组的容器
2.作用:用于把同一类型的一组数组统一管理起来
3.用法:
定义: 类型 数组名 [数组的数量] [子数组的长度]
初始化:类型 数组名 [数组的数量] [子数组的长度]:={ {数组1},{数组2}...}
赋值:数组名 [数组角标] [子数组中数据角标]=值
使用:数组名 [数组角标] [子数组中数据角标];如int a=arr [0] [1];
4.特点:①与数组剧本一样,但传递子数组时传递的是地址
②子数组数量控制列数,单个子数组长度控制列数
③没格子数组类型及长度一致
字符串
1.概念:是一串字符,也是一个以\0结尾的字符数组
2.作用:用于表示一串字符或文本数据
3.用法:定义及初始化:char arr[ ]="abc"; 或char arr[4]={'a','b','c','\0'};
输出:printf("%s\n",s); 或printf("%s\n",&arr[0];
赋值: strcpy(字符变量名,“字符串”);
4.特点:①后面必须有'\0'结尾,否则只算普通的字符数组,但\0不会输出,只表示字符串结束
②字符互传输出占位用%s必须遇到\0才能结束,否则会继续输出更高位地址值的字符
③strlen函数用于计算一个字符串的长度(字符数量),使用必须饮用<string.h>
④strlen不会计算\0,且碰到\0结束,但是sizeof不受\0影响,且长度会包含\0
⑤字符串一定是字符数组,但字符数组不一定是字符串
一个中文字符,等于三个英文字符
指针
1.概念:一是指一种数据类型,二是指一种保存地址的变量
2.作用:用于存储某一个地址,从而可以通过地址直接对该地址内存空间中的数据进行操作
3.用法:定义: 类型 *指针名; 如 int *p表示定义一个能存int类型地址的指针变量p
赋值:指针变量名=指针(地址),注意指针获取方法(&变量名)
4.特点:①指针本身也由地址,指针定义之后,自身地址不变,但里面存的地址可以变化
②&p表示指针本身地址,而p表示指针存得地址,*p表示指针所存地址的内存空间
③指针不初始化赋值不要使用,未复制前地址是随机的,为赋值不可以用*p
④*修饰什么,就表示是真么的指针,判断原则:先确定变量的类型(根据符号优先级)
⑤指针是什么类型的,就应该存什么类型的地址,否则*p取对应内存空间的值会出错
int *p[3] 指针类型的数组
int (*p)[3] 数组的指针
sizeof(a)--->%lu
指针的地址 &p--->%p 指针的值p--->%p(指针保存的是地址) 指针所指空间的值*p--->%d
指针与数组
1.什么是指针数组
表示一个数组,用来存指针的数组就叫指针数组,数组里面的元素都是指针
如:int *p[3]表示定义一个可以存三个int指针的数组
赋值:int a1=1,a2=2,a3=3, int *p[3]={&a1,&a2,&a3}
取值:int *a=p[0];
2.什么是数组的指针?
表示一个指针,而这个指针类型是数组
如:int (*)[3]={1,2,3}; int (*p)[3]=&arr(固定写法);
赋值:int arr[3]3={1,2,3}; int (*P)[3]=&arr;
3.什么是数组元素的指针?
表示一个指针,而这个指针存的是数组一个元素的地址,int arr[1]={1}; int *p=&arr[0]
4.特点:①数组名表示第一个元素的地址,&数组名表示整个数组的地址,二者值相同,但意义不同
②指针可以运算,但仅限于加减运算,运算的实质就是地址运算,即地址的移动
③地址(+1)向高位移动,而(-1)向低位移动,不同指针类型移动一位(+1或-1)的字节数不同
④实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节 |
|