C89:论数组/指针/引用

一.数组

1.整型数组

(1)一维数组
//一维数组
静态: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)二维数组
//二维数组
静态: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";       //字符串赋值给字符数组
 
//注意:字符串总是以'\0'作为串的结束符,编译器已经在末尾自动添加了'\0'
 

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)字符指针指向的字符串常量,不能变,字符数组名指向的内存区域可以变

猜你喜欢

转载自www.cnblogs.com/k5bg/p/11121413.html