一、二维数组 1、二维数组是什么? 是用来存储一组数组的容器。 2、二维数组有什么用? 用于把同一类型的一组数组统一管理起来。 3、二维数组怎么用? 定义:类型 数组名[数组的数量][子数组的长度]; 初始化:类型 数组名[数组的数量][数组的长度]={{数组1},{数组2},...}; 赋值:数组名[数组角标][子数组中的数据角标]=值; 使用:数组名[数组角标][子数组中的数据角标];如,int a = arr[0][1]; 4、二维数组什么时候用? 当需要管理一组有关联的数组时。 5、二维数组有什么特点? 1)与数组基本一样,但传递子数组时传递的是地址。 2)子数组数量控制行数,单个子数组长度控制列数。 3)每个子数组类型及长度一致。 6、补充 1)数组的数量控制行数,数组的长度控制列数。 2)打印一个二维数组 int arr[4][7]={{...},{...},{...},{...}}; for (int i = 0; i < 4; i++) { for (int j = 0; j < 7; j++) { printf("%d\t",arr[j]); } printf("\n"); } 3)打印图形 int main() { int arr[4][7] = {{0,0,0,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,1,1,0},{1,1,1,1,1,1,1}}; for (int i = 0; i < 4; i++) { for (int j = 0; j < 7; j++) { if (0==arr[j]) { printf(" "); }else{ printf("*"); } } printf("\n"); } } 二、字符串 1、字符串是什么? 是一串字符,也是一个以“\o”结尾的字符数组。 2、字符串有什么用? 用于表示一串字符或文本数据。 3、字符串怎么用? 定义及初始化:char arr[]="abc";或char arr[4]={'a','b','c','d'}; 输出:printf("%s\n",s);或printf("%s\n",&arr[0]); 赋值:strcpy(字符变量名,"字符串"); 4、字符串什么时候用 当需要表示一串字符或文本的时候。 5、字符串有什么特点? 1)后面必须有'\0'结尾;否则只算普通的字符数组,但是'\0'不会输出,只表示字符串结束。
2)字符串输出占位用%s,必须遇到\0,才能结束;否则会继续输出更高位地址值的字符。
3)strlen函数用于计算一个字符串的长度(字符数量),使用必须引入<string.h>。 4)strlen不会计算\0,且碰到\0结束,但是sizeof不受\0印象,且长度会包含\0。 5)字符串一定是字符数组,但字符数组不一定是字符串。 三、指针 1、指针是什么? 是一个能存地址的数据类型。(另一种是保存地址的变量) 2、指针有什么用? 用于存储某一个地址,从而可以通过地址直接对该地址内存空间中的数据进行操作。 3、指针怎么用? 定义:类型 *指针名;如,int *p;表示定义一个能存int类型地址的指针变量,名叫p。 赋值:指针变量名=指针(指针);注意:指针获取方法(&变量名)。 4、指针什么时候用?(以下的p表示一个指针变量名) 当需要存储地址,以便于操作该地址及地址对应的内存数据的时候。 5、指针有什么有特点? 1)指针本身也有自身地址,指针定义之后,自身地址不变,但里面的存的地址可以变化。
2)&p表示指针自身地址,而p表示指针存的地址,*p表示指针所存地址的内存空间。
3)指针不初始化赋值不要使用,未赋值前地址是随机的,未赋值不可以用*p。
4)*修饰什么,就表示是什么的指针;判断原则:先确定变量的类型(根据符号优先级)。
5)指针是什么类型的,就应该存什么类型的地址,否则*p取对应内存空间的值会出错。
6、补充 1)int a = 10;int *p=&a;
*p表示的是变量,p表示的是指针。 sizeof(a) == sizeof(*p) != sizeof(p) 4 4 8 int类型的变量占4个字节,但是指针占8个字节。 2)int *(p[3]);和int (*p)[3]的区别 int *(p[3]):指针类型的数组; int (*p)[3]:数组的指针; 四、指针与数组 1、什么是指针数组? 表示一个数组,用来存指针的数组就叫指针数组,数组里面的元素都是指针。 如:int *p[3];表示定义一个可以存三个int指针的数组。 赋值:int a1=1,a2=2,a3=3; int *p[3]={&a1,&a2,&a3}; 取值:int *a=p[0]; 2、什么是数组的指针? 表示一个指针,而这个指针类型的是数组。 如:int (*p)[3];表示这是一个含有三个元素的int数组的指针。 赋值:int arr[3]={1,2,3}; int (*p)[3]=&arr; 3、什么是数组元素的指针? 表示一个指针,而这个指针存的是数组一个元素的地址。 如:int arr[1]={1};int *p=&arr[0]; 4、指针数组有什么特点? 1)数组名表示第一个元素的地址,&数组名表示整个数组的地址,二者值相同,但意义不同。
2)指针可以运算,但仅限于加减运算;运算的实质就是地址运算,及地址的移动。
3)地址(+1)向高位移动,而(-1)向低位移动;不同指针类型移动一位(+1或-1)的字节数不同。 4)实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节。 |