1.二维数组:是用来存储一组数据同意管理起来
定义:类型 数组名[数组的数量][子数组的长度]
特点:与数组基本一样,但传递数组时传递的是地址
子数组数量控制行数,单个子数组长度控制列数
每个子数组类型及长度一致
2:冒泡排序思路:1.让第一个元素与后一个数比较,如果打则交换位置,依次类推
2.每一次比完之后,最后一个元素就是这个数组的最大值
3.继续让第一个元素与后面的每一个元素比较,之前已经找出最大不用比较
4.每一个元素都比较完后,排序完成
3.字符串:是一个'\n'字符数组
定义及初始化:char arr[] = "abc";或char arr[4] = {'a','b','c','\0'};
输出 printf("%s\n",s);或printf("%s\n",&arr[0]);赋值:strcpy(字节变量名,"字符串");
特点:后面必须有"\0"结尾;否则只算普通的字符数组,但"\0"不会输出,只会表示字符串结束
字符串输出占位用%s必须遇到\0才能结束;否则会继续输出更高位地址值的字符
strlen函数用于计算一个字符串的长度(字符数量),使用必须引入(string.h)
strlen不会计算\0,且碰到\0结束,但sizeof不受\0影响.且长度会包含\0
字符串一定是字符串数组,但字符数组不一定是字符串
4.指针;严格上来讲,指针具有,两层含义;一是指一种数据类型,二是值一种保存地址的变量
有什么用;用于存储某一个地址,从而可以通过地址直接对该地址内存空间中的数据进行操作
怎么用:定义:类型 *指针名 ;如int *p;表示定义一个能存int类型地址的指针变量,名字叫p
赋值:指针变量名 = 指针(地址),注意;指针获取方法(&变量名)
什么时候用:当需要存储地址,以便于操作该地址及地址对应内存数据说的时候
特点:指针本身也有地址,指针定义后,自身地址不变,但里面存的地址可以变化
&p表示指针自身地址,而p表示指针存的地址,*p表示指针所存地址的内存空间
指针不初始化赋值不要使用,未赋值前地址是随机的,未赋值不可以使用*p
*修饰什么就表示是什么的地址,判断原则:先确定变量的类型(根据符号优先级)
指针是什么类型,就应该存什么类型的地址,否则*p取对应内存空间的值会出错
5.指针与数组:
什么是指针数组:表示一个数组,用来存指针的数组就叫指针数组,数组里面的元素都是指针
如int *p[];表示定义一个可以存三个int指针的数组
赋值:int a1 = 1;a2 = 2,a3 = 3,;int *p[3] = {&a,&b,&c};取值int *a = p[0];
什么的数组的指针:表示一个指针,而这个指针类型是数组
如 int (*p)[3] ;表示这是一个含有三个元素的int数组的指针
赋值:int arr[3] = {1,2,3};int (*p)[3] = &arr;
什么是数组元素的指针
表示一个指针,而这个指针存的是数组一个元素的地址,int arr[1] = {1};int *p = &arr[0]
特点:数组名表示第一个元素的地址,&数组名表示整个数组的地址,二者值相同,但意义不同,
指针可以运算,但仅限于加减运算,运算的实质就是地址的运算,及地址的移动
地址(+1)向高位移动,而(-1)向低位移动,不同指针类型移动一位(+1或-1)的字节数不同
实际移动的字节数看指针类型,类型占多少字节,一位就移动多少字节 |
|