C 指针 数组

1.声明变量:在计算机内存中取得一小块内存,并为这块内存取一个名字(例在编译器中输入int a; 表明取得的这块内存只能存放整形数据,并且用a可以代表这个整形数据,a就是它的名字)

2.声明数组:在计算机内存中取得连续的几块内存,(例在编译器中输入int a[5]; 表明在计算机内取得连续的五块内存,并把排在第一个内存的地址用a表示,此时的a虽然是数组名,但是它本身就是一个指针,也就是数组第一个内存的地址),a[0]的地址是a, a[1]的地址是a+1, a[2]的地址是a+2.....a[4]的地址是a+4(注意数组a[5]中没有成员a[5],只有a[0]-a[4])。

3.为什么要数组这种数据结构:假如只要声明一个或少数变量,只要在编译器中输入int a,int b,int c;但这样有个缺点,就是一旦你要输入很多数据,就要同时输入很多变量名,如输入100个数据,就要声明一百个变量名,这样比较麻烦了,但是数组就很方便了,a[0]-a[99],f赋值的时候用一个for循环:for(i=0;i<=99;i++)

       scanf(‘%d’,&a[i]);

就可以连续输入100个整形数据;

4.指针:指针的本质就是地址,取地址的符号是&,比如你在编译器中输入int a; 就取得一块叫做a的内存,但是这块内存是有地址的,&a就能取得变量a的地址,只要在变量名前加个&,计算机内存很大,其中划分了很多很多很多小块内存,就像一个小区,里面住了很多人家,每户人家都有门牌号码,指针就像这个门派号码,那它有什么好处呢?打个比方,老师要见你的全家,有两种方法:第一,让你全家人去学校找老师;第二,把你家的地址给老师,让他自己去找,相比较,第二种方法好,因为全家人多,不方便,如果只见你爸爸,就第一种方法好;

5.声明指针变量:如int * p;或者int  *p;此时的p是指针变量,只能存放地址,不能存放int整形数据或者其他数据;比如在编译器中打如:int a=5; int * p; p=&a; 此时的*p和a是等价的,都是5;(*的含义见下文)

6.指针和数组的联系:你在编译器中输入int a[5];如果其他地方要用到数组里的数据,可以把a[0]-a[4]挨个传过去,但是这只适用于数据量较小的数组,如果a[100],就比较麻烦了,为什么呢,太多了,要传一百个呢,但是有一种好办法就是传个指针就OK了,这个数组的指针就是数组的变量名a,要访问a[0]里的数据,只要在a的前面加一个*就好了,在指针(地址)前加*表明这块地址中存放的数据,*a和a[0]是等价的,好了,a[0]是可以访问了,但是a[1],a[2]...a[4]怎么办呢?a只表示a[0]啊,此时访问a[1]只要把*a改成*(a+1)就可以了,访问a[2]只要把*a改成*(a+2)就可以了,下面以此类推。那为啥只要在a后加1加2就可以了呢,因为你分配的数组内存是连续的,就像排好队的,加1,就代表访问下*a后面的变量,,加2就是访问*(a+1)后面的变量,后面也一样,所以很方便的,用一个数组只要得到他的数组名(就是第一个数组元素的地址)就好了。

7.指针的用途:函数调用的时候,要传数据或者函数时,用的最多的就是传指针,这样方便快捷,不需要传太多的数据,只要传个指针(地址)就好了。

                          

 

posted @ 2013-07-17 19:21  loveyuu  阅读(192)  评论(0)    收藏  举报