A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunyongnan 中级黑马   /  2015-8-9 20:16  /  410 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、二维数组
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)实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马