一.数组的定义:
int[ ]; //[ ]内不能为空,必须是整数且不能为负数。在编译时[ ]的数必须是给定的整形变量。例如[ 7/2 ]对[7/2.0]错。
void main
{
int n=10;
int ar[n]; //这种定义是错误的,在编译时n是一个变量是一个不确定的变量,在运行时10才会赋值给n.
}
void main
{
int ar[ ]={2,3,4,48,552,523,524,21}
int n=sizeof(ar)/sizeof(ar[ 0]);
int br[n]; / /这样定义是正确的,sizeof(ar)/sizeof(ar[ 0])计算在预编译时就确定了n值的大小。
}
二.数组的初始化;
int ar[5]={ , , ,12,}//这样定义是错误的,开始是不许出现 ,空数。
int ar[10]={21,25,25,321}
int ar[ ]={55,24,54,897,1547,}
三.数组与指针的区别:
数组是解决块区域的方案,要开辟连续的空间.指针大小为四字节用来存放某个类型变量的地址.
int ar[20];
int*p=ar;
1.数组名 ar 在sizeof中和在&ar 数组名代表整个数组大小,在其他地方代表数组首元素地址。
2.访问数组中的元素:用数组名可以输ar[i],用指针p[i]也可以输出。
3.ar[i]不一定是数组名,还可能是指针。
4.数组名不可以做++ar或--或ar=NULL赋值操作。但是指针操作可以p++,p--等;
5.ar[i]=*(ar+i)=i[ar]==>因为在编译时都转化成
*(ar+i)=*(ar+i)=*(i+ar).
6.指针&p+1表示指向数组下一个存储单元大小移动四个字节。
数组&ar+1表示移动到下一个数组大小的内存单元(移动大小为整个数组的大小)
四.const和引用的关系
void main()
{
const int a=10;
int b=a;
int &c=a;//错误,因为a是个常量,不可改变,而引用cm没有限制,想通过&C改变a的值是不可以的;
const int &c=a;//是可以的
}
viod main()
{
int a=10;
int b=a;
const &c=a;//可以向权限缩小是ok的;
}
void main()
{
const int a= 10; //在编译时const &b=10
const int&b=10; int tem=10;const &b=tem;
const int &c=a; 所以const int a=10;
const int &x=c; const &b=a
} int tem=a
所以可以编译通过 , const int &b=tem b的改变并不会影响a的值
五;函数的返回值问题
有四种
传值
void fun(int a,int b)
{ int c=a+b;
return c;
}
传地址
void *fun (int a,int b)
{ int c=a+b;
ruturn &c;
}
引用
void fun(int& a,int &b)
{
int c=a+b;
return c;
}
void fun(int arr[])//退化成指针形式
说明:传地址,引用作为形参返回值时是不安全的;因为变量有它的生存期,当函数结束时他也随之消失。
六 二维数组
int*p[10]:表示开辟十个整形空间存放整形类型的指针
int(*p)[10]:表示指向开辟十个整形大小空间的指针。
定义一个数组
int arr[5]
定义一个二维数组int ar[3][4]
s+1表示移向下一个数组
*s+1表示移向下一个元素