在主函数中定义
目前创新互联建站已为成百上千的企业提供了网站建设、域名、虚拟空间、网站托管、企业网站设计、潼关网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
input里面 把这两个定义的传参。
addarrays 里面 同样传这两个数组做参数。
在addarrays里面 循环累加就好了。
数组长度可以用宏定义 。
void fun(int a[],int n)
{
int *p;
int i;
p=a;
for(i=0;in;i++)
*(p+i)+=2;
}
验证:
#include "stdio.h"
void fun(int a[],int n)
{
int *p;
int i;
p=a;
for(i=0;in;i++)
*(p+i)+=2;
}
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("The original arry a:\n");
for(int i=0;i10;i++)
printf("%d,",a[i]);
printf("\n");
fun(a,10);
printf("The final arry a:\n");
for(i=0;i10;i++)
printf("%d,",a[i]);
}
输出结果:
The original arry a:
1,2,3,4,5,6,7,8,9,10
The final arry a:
3,4,5,6,7,8,9,10,11,12
实现
一、意思不同
*(p+2) 表示先将地址后移两位,再取地址内容。*p+2 表示先取当前地址内容,然后对内容加2。一个是对地址的操作,一个是对内容的操作,完全不同。
二、用法不同
例如:
有数组a:
1 2 3 4 5
*p=a;
那么:
*(p+2)=3,*p+2=3
*p就等于1.*(p+X)就是将指针移x的位置。
三、用途不同
1、*p[ ]
在main函数的参数中有使用到,其中的 char *argv[]的argv就是一个指针数组,用来存储函数调用时传进来可变个数的参数
int main(int argc, char *argv[])
{
something you want to do; return 0;
}
2、 (*p)[ ]可以作为二维数组的引用
数组的下标是从0开始的,并非从1
因此假设定义数组int a[3],那么有效的数组元素为a[0] a[1] a[2]
楼组的代码里面的数组从1开始使用,输入3*3的数组会导致越界,踩内存发生错误
void fun(int arr[M][N])
{
int i,j;
for(i=1;i=M;i++) //应该是for(i=0;iM;i++)
for(j=1;j=N;j++)
scanf("%d",arr[i][j]);
}
其他也按照这个修改就可以了