2018-04-11函数,数组和指针

假设待处理的是名为a的int类型的数组。
int a[];
total=sum(a);//函数调用
由于数组名是数组首元素的地址,所以实际参数a是一个存储int类型值的地址,应当把他赋给一个指针形式参数,即该形参是一个指向int的指针。
int sum(int *ar);//对应的函数原型。
声明数组形参
int sum(int *ar,int n);
int sum(int *,int);
int sum(int a[],int n);
int sum(int [],,int);
数组函数定义
int sum(int *ar,int n);
int sum(int a[],int n);
函数处理数组要知道数组何时开始何时结束
方法一:使用一个指针形参标识数组的开始,用一个整数形参表明待处理数组的元素个数。

#include <stdio.h>
#include <stdlib.h>
#define size 10
int sum(int ar[],int nr); 

int main(int argc, char *argv[]) {
    int a[size]={10,20,39,4,5,16,26,31,19,20} ;
    int t;
    t=sum(a,size);
    printf("%d",t);
    return 0;
}
int sum(int ar[],int nr)
{int i;
int t=0;
for(i=0;i<nr;i++)
{t+=ar[i];
printf("%d %d\n",i,ar[i]);
}
return t;
}
捕获.PNG

方法二:传递两个指针,第一个指针指明函数的开始处,另一个指针指明函数结束的位置。

#include <stdio.h>
#include <stdlib.h>
#define size 10
int sum(int ar[],int arr[]); 

int main(int argc, char *argv[]) {
    int a[size]={10,20,39,4,5,16,26,31,19,20} ;
    int t;
    t=sum(a,a+size);
    printf("%d",t);
    return 0;
}
int sum(int ar[],int arr[])//ar[]相当于*ar
{int i;
int t=0;
while (ar<arr)
{t+=*ar;
 ar++;//地址++ 
}
return t;
}

t+=*ar;
ar++;
可改成

t+=*ar++;等价与*(a++)

一元运算符
*
和++的优先级相同,但结合律是从右往左,所以ar++先求值,然后才是

*ar

。也就是说ar先递增后指向。
使用后缀(ar++而不是++ar)意味着先把指针指向位置上的值加给t,然后再递增指针。(对t而言的先后)

#include <stdio.h>
#include <stdlib.h>
int main (void)
{int a[2]={100,200};
int b[2]={300,400};
int *p1,*p2,*p3;
p1=p2=a;
p3=b;
printf("*p1=%d *p2=%d *p3=%d\n",*p1,*p2,*p3);
printf("*p1++=%d *++p2=%d (*p3)++=%d\n",*p1++,*++p2,(*p3)++);
printf("*p1=%d *p2=%d *p3=%d\n",*p1,*p2,*p3);
    
    return 0;
 } 
捕获.PNG
*P++==*P(++)

先对原先的p地址取值,然后递增,等下次用到*p时取的是递增后对应地址的值。

*++P

先对原先的p递增,然后取递增后对应位置上的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容