C语言基础学习第五天,二维数组和指针

1. 二维数组

1.1 定义

        定义格式:存储类型 数据类型 数组名[行数][列数];

int arr[2][3]={1,2,3,4,5,6};//定义一个两行三列的二维数组

1.2 访问 

        数组名[行下标][列下标]  //下标从零开始

注意:(数组越界) 行 、列都不能越界 , 定义时可以省略行数, 不可以省略列数

1.3 二维数组的个数和大小 

1.个数: 二维数组的个数=行数*列数
               sizeof(数组名)/sizeof(数据类型) 

2.大小:二维数组的大小=数据类型*行数*列数
              sizeof(数组名)

         补充:数组名:首地址   
                   arr:第一行的首地址  
                   arr[0]:第一行第一列的首地址

1.4 初始化 

1.全部赋值:int  arr[2][3]={1,2,3,4,5,6};//顺序赋值
                     int  arr[2][3]={{1,2,3},{4,5,6}};//按行存储

 2.部分赋值:int  arr[2][3]={1,2,3,4};//顺序赋值  1 2 3 4 0 0
                      int  arr[2][3]={{1,3},{4}};//按行存储  1 3 0 4 0 0

3.不初始化:int  arr[2][3];//随机值
                     arr[0][0]=1;//每个元素单独赋值 

1.5 内存遍历 

 

定义arr[2][4],和一维数组不一样的是,当用数组名遍历时,数组名+1,代表的是第二行的地址。

2.指针 

2.1 优点 

 1.使程序更简洁、紧凑、高效   这个有点不算是指针比较鲜明或者独特的点
 2.有效的表达更复杂的数据结构
 3.动态分配内存 合理利用空间
 4.得到多于一个数的函数返回值  容易实现函数的编写和调用。 

2.2 概念 

 1. 地址:内存空间的编号
 2. 指针:内存地址
 3. 指针变量:用来存储内存地址的变量

2.3 定义

存储类型   数据类型  * 变量名;

 例如:int *p;//指针变量p

注意:指针的数据类型  是由其将要存储的数据类型决定


2.4 指针和所指变量的关系

     *p==值          p==地址

例如:int *p = a;

           *p就是a的值,p就是a的地址

 2.5指针的操作符

 &:取地址        *:取内容         &p:指针变量的地址         *&a=a;         &*a;错误

2.6 初始化 

1、存储普通变量的地址

int a = 0;
int *p = &a;

2、存储数组的地址

int arr[] = {};
int *p = arr;

3、将指针的指向赋值给另一个指针

int a = 0;
int *p = &a;
int *q = p;

 2.6 指针的运算

1. p+n:向高地址方向移动,移动一个数据单位,p本身的指向不会发生变化
2. p-n:向低地址方向移动,移动一个数据单位,p本身的指向不会发生变化
3. p++:向高地址方向移动,移动一个数据单位,p本身的指向会发生变化
4. p--:向低地址方向移动,移动一个数据单位,p本身的指向会发生变化

注意:int *p; p++//移动4个字节
        char *q;q++//移动一个字节 1

 

 欢迎大家指正!!!

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值