zoukankan      html  css  js  c++  java
  • C++学习---指针与数组

    1.数组

    由具体详相同数据类型的数据元素按照一定顺序排列而成的集合,由字符数组、常量数组、实数数组和指针数组等。

    1.1一维数组

    //一维数组的定义
    类型 数组名[常量表达式];
    float arry[10];
    //其中常量表达式为数组大小,不能含有变量
    
    //一维数组的存储
    数组名为数组首元素地址,后续元素按照下标顺序连续存储
    int a[6];
    //说明6个int型数据按照顺序依次排列
    
    //一维数组的初始化
    int a[5] = {1,2,3,4,5};
    int a[5] = {1,2,3}//可以小于数组元素,后续补0
    int a[] = {1,2,3,4,5}//可以不指定长度
    
    
    //一维数组的引用
    数组名[下标]
    //从0开始,最大下标为常量表达式减一

    1.2多维数组

    //二维数组的定义
    类型 数组名[常量表达式][常量表达式];
    int a[3][4];
    //数组的数组,即为包含a[0],a[1],a[2]三个一维数组的数组
    
    //二维数组的存储
    从右到左,从上往下一次存储
    
    //二维数组的初始化
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//依次初始化
    int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//依次逐一初始化时可省略行下标
    int a[3][4] = {1,2,3};//省略元素自动补0
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9}};//
    
    //二维数组的引用
    数组名[行下标][列下标];
    
    //多维数组的定义
    int a[2][3][4];

    1.3字符数组和字符串

    //字符数组的定义
    char 数组名[常量表达式];
    char ch[6];
    
    //字符串
    以双引号括起来的字符序列,长度固定的数组可以存放不同长度的字符串,字符串以''作为结束的标志
    
    //字符数组的初始化
    char ch[5] = {'a', 'b', 'c', 'd', 'e'};
    char ch2[5] = "abccd";//使用字符串初始化数组时长度减一
    char ch3[3][4] = {"abc", "def", "xyz"};
    
    //字符数组元素的引用
    数组名[下标];
    
    //字符串处理函数:拷贝、连接、比较、长度<string.h>
    strcpy(sto, strom);//注意sto空间足够大
    strcat(s1, s2);//注意s1空间足够大
    strcmp(s1, s2);//自左向右逐一比较对应字符的ASII码,相等返回0,s1>s2返回正数,s1<s2返回负数
    srelen(str);//返回字符串的长度(有效字符的个数)
    
    //String类
    使用重载运算符,连接、赋值、拷贝不再需要函数

    2.指针

    2.1指针的概念

    指针:存放变量、数组与函数等的内存地址;

    指针变量:存放内存地址(即指针)的变量;

    作用:提供一种间接访问变量的手段;

    注意:必须先赋值后引用

    2.2指针变量定义

    //指针变量的定义
    类型 *指针变量名;
    int *p1;
    float *p2;
    char *p3;
    void *p4;
    
    //指针变量的初始化
    类型 *指针变量名 = 内存地址;
    int a, *p1;
    p1 = &a;
    注意:指针不能直接赋以具体值(可以是NULL空指针值),指针必须先赋值后使用

    2.3指针运算

    引用运算

          取地址运算:&(指针变量名)  得到指针变量本身的地址

          取内容运算:*(指针变量名)得到指针指向的存储单元的内容

    算术运算:与整数N进行加减,表示指针由指向当前位置向前或向后移动指向N个单元

    关系运算:判断两个指针是否指向同一单元

    3.指针与数组

    3.1指向数组的指针

    指向一维数组的指针
    //指针访问数组元素
    int a[10];
    int n;
    n = *a;//指向数组第一个元素
    n = a[5];//指向数组第6个元素
    n = *(a + 5);//指向数组第6个元素
    
    //[]访问指针存储的内容
    int a[10];
    int *p = a;
    int n;
    n = *a;//指向数组第一个元素
    n = p[5];//指向数组第6个元素
    n = *(p + 5);//指向数组第6个元素
    
    //指针型变量与数组名指针常量
    char ca[10];
    char *ch;
    ca = &ch;//错误,不能将一个指针值赋予一个数组名
    指向多维数组的指针
    首地址:数组名
    行首地址:数组每一行的地址,相当于组成二维数组的一位数组的地址
    元素地址:二维数组具体分量的地址
    a[i][j]的地址表示如下: 
    &a[i][j] = a[i]+j = *(a+i)+j = a[0]+i*m+j//这里有点不太明白
    //指向数组元素的指针变量
    int a[3][4];
    int *p;
    p = a[0];//p是指向数组元素的指针,变量存放的是列地址
    
    //指向一维数组的指针变量
    int a[3][4];
    int (*p)[4];//指向一维数组的指针变量

    3.2指向字符串的指针

    指针处理字符串是指针处理数组的一种特殊情况;

    3.3指针数组和指向指针的指针

    指针数组:数组元素均为指针变量的数组;

    类型 *数组名[常量表达式];
    int *p[5];

    指向指针的指针:多级指针

    4.指针与函数

    4.1指向函数的指针

    //即指针指向函数的入口
    返回值类型 (*指针变量名)(形参列表);

    4.2返回指针值的函数

    //即返回值为指针类型
    类型 *函数名(形参列表);
  • 相关阅读:
    JavaScript界面传值与前后台互调
    @requestBody注解的使用
    mybatis动态sql中foreach标签的使用
    mybatis动态SQL中的sql片段
    mybatis动态sql中where标签的使用
    mybatis动态sql中的trim标签的使用
    mybatis动态SQL中的set标签的使用
    SQL-join(inner join)、left join、right join、full join
    Oracle-distinct()用法、count(distinct( 字段A || 字段B))是什么意思?distinct多个字段
    Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异
  • 原文地址:https://www.cnblogs.com/zouhq/p/10574114.html
Copyright © 2011-2022 走看看