C指针学习(C Premier Plus 学习笔记)

数组和指针:这里 flizny是一个数组。

flizny == &flizny[0];  //数组名是该数组首元素的地址,两者都是常量,在程序的运行过程中,不会改变。但是,可以把数组名赋值给指针变量然后可以修改指针变量的值

例: short dates[4];  short *pti;  pti = dates;  //数组名是数组首元素地址,将地址赋值给指针。

  C中,指针加1,指的是增加一个存储单元。对于数组来说,意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址(声明指针时要指向对象类型)。

  

1 dates + 2 == &dates[2];    //相同的地址
2 *(dates + 2) == dates[2];    //相同的值
3 
4 // ar[n] == *(ar+n)
5 
6 *(dates+2);     //dates 第3个元素的值
7 *dates+2;        //dates第一个元素的值加2
datas++     //指针递增,指向数组的下一个元素

 

函数、数组和指针

  处理数组的函数,该函数返回数组中所以元素之和。

  total = sum(marbles);  //可能的函数调用

其中,数组名marbles是数组首元素的地址,故这个函数传递的是一个地址,因此,函数原型中的形参是一个指针,int sum(int *ar);    实参是地址,则函数原型中的形参是指针。  形参指针,实参地址(数组名)

sum从该参数获得了该数组首元素的地址

注: 因为数组名是该数组首元素的地址,作为实际参数的数组名,要求形式参数是一个与之匹配的指针。

 

使用指针形参:

int sum(int *ar, int n); 

int sum(int ar[], int n);   // 等价的两种表示方法

  //sum() 函数使用一个指针形参标识数组的开始(也表明了数组中的数据类型),用一个整数形参表面待处理数组的元素个数。

还有一种方法可以给函数传递信息:传递两个指针,第一个指针指明数组的开始处,第二个指针指明数组的结束处。

  int sump(int *start, int *end);

 两种循环:

for(i = 0; i < n; i++)

while (start < end)    //使用两个指针开始和结束循环

 

指针表示法和数组表示法:

ar[i]    和    *(ar+i)    等价。ar[i]中的ar是数组名,*(ar+i)中的ar是指针变量。只有当ar是指针变量时,才可以使用ar++这样的表达式。

 

指针递增表达式:

int data[2] = {100,200};
int moredata[2] = {300,400};
int *p1, *p2, *p3;
p1=p2=data;        //数组名赋值给指针
p3=moredata;

*p1++ = 100;        //    *p1=200    先使用指针指向位置的值,再递增指针
*++p2 = 200;        //    *p2=200   先递增指针,再使用指针指向位置上的值
(*p3)++=300;        //    *p3=301   先使用指针指的值,再将这个值递增

 

实参和形参

实参用于把值从主调函数传递给被调函数。

被调函数一般不会改变主调函数中的变量,如果要改变,应使用指针作为参数。如果希望把更多的值传回主调函数,必须这么做(用指针)。因为用return语句只能把被调函数中的一个值传回主调函数,要传更多的值,只能使用指针

posted @ 2018-06-07 13:25  阳光正好只欠拥抱  阅读(819)  评论(0编辑  收藏  举报