数组和指针

来源:互联网 发布:在线商标设计软件 编辑:程序博客网 时间:2024/05/21 17:37

数组:

数组在定义时,系统分配一个‘连续’的内存空间,注意是一个连续的空间

定义一个int a[10];数是a[0],。。。。a[9];(计算机一般习惯是从0开始)

数组有个默认的头地址a,下一个空间就是a+1,所以当你输入时对a[1],可以这样赋值scanf("%d",a+1);

 a                a+1 

          

 4个字节

所以int a[10],系统给他分配4*10=40个字节的空间

指针:

指针式c/c++的精华,非常有用,也可能有很多朋友,觉得很难学不会,不理解。

其实你加一个操作系统的思想,就好理解了。

在你定义一个变量时,系统会分配一个地址和相应的内存空间,(系统是通过差地址,找到相应内存)

例:int a=9;  那取他的地址 就是 &a

     &a         地址
 
  内存  
            

     

     现在聊聊指针:

定义一个int *p

这是个指针,你也可以将他理解成地址,系统给他分配4个字节的内存(注:所有类型的指针都是4个字节,因为他只是个地址)

1

int a=9;    //定义一个变量

int *p;    //定义一个指针,

p = &a;     //a的地址赋值给, 即p的地址就是a(注:int的地址,只能用int型的指针来接地址)

操作系统是通过地址,来找内存。*p你就可以理解成就是a的内存。*p==a

2

int a[10];    //定义一个数组

int *p ;    //定义一个指针

p=a;       //见上面数组,数组默认一个头指针a,将a赋值给p

          //p的地址就是数组a[]的首地址,所以*p==a[0];*(p+1)==a[1]......

3,

int a[10];

int **p;  //定义一个指针的指针

*p=a;

可能指针的指针,让很多朋友苦恼,让我们图形化一下

定义指针的指针其实就是系统分配两个地址,例*p,和p

    

                          *p

 

                            p

*p=a; //a的地址给*p,(注意这时的*p是个地址),所以**p==a[0];

这里还可以这样

p = &a//p就是存放a地址的地址,*p就是a的地址,**p就是a的地址的内存值

   

由于指针操作时对其指向的内存操作,所以在函数调用时,如果传递的是个地址,对其地址指向内存的值更改。所以函数调用后,

传递的地址的内存值,会相应地改变。

 

函数返回类型是指针型,那他最后的return的应该是个地址,通过接收该地址,那就可以访问该内存了。

 

原创粉丝点击