zoukankan      html  css  js  c++  java
  • C89:论数组/指针/引用

    一.数组

    1.整型数组

    (1)一维数组

    在一维数组中,数组名表示数组的第一个元素的地址

    a[i] == *(a+i)  // 在一维数组中,地址a进行加法 i 之后地址偏移,然后 *

    //一维数组
    静态:int array[100];
    静态:int array[100]={1,2};  //只初始化前两个元素
    静态:int array[100]={0};    //全部置为零
     
     
    动态:int* array=new int[100];
         delete[] array;
     
    动态:int* array=new int[100](1,2);    
         delete[] array;
     
    
    (2)二维数组

    在二维数组中,数组名表示 a[0] 的地址

    a[1] == &a[1] [0]  // 在二维数组中,a[1] 表示的是地址,而不是数组元素

    a[i] + j == &a[i] [j]  //在二维数组中,a[i] 表示的是地址,进行加法 j之后,也只是地址偏移,而不是数组元素

    *(a+i) == a[i]   // 在二维数组中,a[i]表示的是地址,所以 *( *(a+i) + j ) == *(a[i] + j) == a[i][j]

    //二维数组
    静态:int array[10][10];
    静态:int array[10][10]={{1,1},{2,2}};
     
    动态:int (*array)[n]=new int[m][n];
         delete[] array;
     
    动态:int** array=new int*[m];
         for(i)
            array[i]=new int[n];
         for(i)
            delete[] array[i];
         delete[] array;
     
    动态:int* array=new int[m][n];
        delete[] array;
    
    (3)多维数组
    int* array=new int[m][3][4];
    delete[] array;
    

    2.字符数组

    char[]表示字符数组

    注意:数组名是一个不可修改的常量,不能对数组名进行赋值或者更改

    char a[10];        //一维字符数组
    char a[10][5];     //二维字符数组
    char a[5]={'a','b'};    //多个字符赋值给字符数组
    char a[]={'a','b'};     //多个字符赋值给字符数组
     
    char a[5]={"abc"};    //字符串赋值给字符数组
    char a[5]="abc";      //字符串赋值给字符数组
    char a[]="abc";       //字符串赋值给字符数组
     
    //注意:字符串总是以''作为串的结束符,编译器已经在末尾自动添加了''
     
    

    3.数组传参

    (1)一维数组传参
    //一维数组传参
    void func(int* array);
     
    void func(int array[]);
    
     (2)二维数组传参
    //二维数组传参
    void func(int** array);
     
    void func(int (*array)[n]);
    

    二.指针

    1.char*

    char*表示字符指针

    char* p="test";
    char* p={"test"};
     
    //由于p指针指向的是字符串常量,所以推荐这样写:const char* p="test";
    

    3.智能指针

    4.二维指针和三维指针

    三.数组和指针

    1.char*和char[]的相同

    在传递函数参数的时候,字符数组和字符指针可以相互代替

    void Test(int* a){
     
        char* a="abc";  //局部函数调用后,a指针变量指向的常量地址不会消失
        char a[]="abc"; //局部函数调用后,a数组指向的内存会销毁
    }
     
    int main(){
     
        int a[]="test";  
        int* p;
        p=&a[0];
        p=a+1;
     
        Test(a);
    }
    

    2.char*和char[]的不同

    (1)字符指针是变量,可以改变值,字符数组名是常量,不能变

    (2)字符指针指向的字符串常量,不能变,字符数组名指向的内存区域可以变

  • 相关阅读:
    topcoder srm 708 div1
    FBX SDK在vs 2010下面的配置
    Google Protocol Buffer在vs2010下配置
    topcoder srm 709 div1
    topcoder srm 707 div1
    CNN Mnist
    SVM学习笔记5-SMO
    SVM学习笔记4-核函数和离群点的处理
    SVM学习笔记3-问题转化
    如何使用SSL pinning来使你的iOS APP更加安全
  • 原文地址:https://www.cnblogs.com/k5bg/p/11121413.html
Copyright © 2011-2022 走看看