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