数组以及数组与指针的关系及函数返回值的

一.数组的定义:

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]


数组以及数组与指针的关系及函数返回值的_第1张图片


定义一个二维数组int ar[3][4]


数组以及数组与指针的关系及函数返回值的_第2张图片


s+1表示移向下一个数组

*s+1表示移向下一个元素



你可能感兴趣的:(数组以及数组与指针的关系及函数返回值的)