您的位置:首页 > 其它

指向一维数组的指针学习笔记

2018-03-12 14:10 441 查看
main()
{
int a[]={2,4,6,8,10},y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
{
y+=*(p+x);//1+4+6+8
}
printf("y=%d",y);//19
}

main()
{
int a[]={2,4,6,8,10,12,14,16,18},y=1,x,*p;
p=&a[2];

printf("p[3]=%d",p[3]);//12   p[3]=*(p+3)
}

void sum(int *a)
{
a[0]=a[1];       //*(a+0)=*(a+1)
}
main()
{
int aa[4]={1,2,3,4},i;
for(i=2;i>=0;i--)
{
sum(&aa[i])
}
printf("aa[0]=%d",aa[0]);
}

void func(int *a,int b[])
{
b[0]=*a+6;
}
main()
{
int a,b[5]={0};
a=0;
b[0]=3;
func(&a,b);
printf("b[0]=%d",b[0]);
}

//程序功能,利用指针实现数组a的元素倒置
void fun(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
main()
{
int a[8]={1,2,3,4,5,6,7,8},*p,*q,i;
p=a;
q=&a[7];
while(p<q)
{
f(p,q);
p++;
q--;
}

for(i=0;i<8;i++)
{
printf("%d",a[i]);
}

}

//把数组a中的所有素数加起来。
int isPrimer(int *n)
{
int i;
for(i=2;i<n;i++)
{
if(*n%i==0)
return 0;
}
return 1;
}

main()
{
int a[10]={11,34,45,56,67,78,89,23,12,32},*p=a,s=0;
for(;p<a+10;p++)
{
if(isPremer(p))
{
s+=*p;
}
}
printf("s=%d",s);
}

以函数的形式来编程
指向一维数组元素指针,作为参数的格式:
   1:数组对数组
型参:fun(int a[],int n)
实参: fun(a,5)
2:数组对指针
 型参:fun(int *a,int n)
 *(a+i)--->不会移动指针a的位置,它实际上是以a为参考点,向下访问到第i个元素。、
 a++; 指针在向下移动一个单位
 实参: fun(a,5);
 3: 指针对指针:
 型参:fun(int *a,int n)
 实参:fun(指针名a,n)
3、 指向一维数组的首元素的指针可以当数组来使用
int a[5]={1,2,3,4,5}
int *p=a;

a--->1<---p
    2
3
4
5

//写一个函数,求出长度为n的一维数组a的所有元素之和
int fun(int a[],int n)//写成int fun(int *a,int n)也可以,数组名代表了数组的首地址
{
int i,s=0;//并没有移动指针a
for(i=0;i<n;i++)
{
s+=a[i];//也可以写成s+=*(a+i);或者s+=*a++
}

return s;
}

main()
{
int a[5]={1,2,3,4,5};
int b[5]={1,2,3,4,5},*p=b;//这时p[4]与b[4]是一样的;b是常量,p是变量
printf("sum=%d",fun(a,5));
fun(b,5);

}

//应用举例求出长度为n的整型数组,所有奇数和偶数之和,型参n给定数组的长度
形参odd用来保存所有偶数的和,形参even保存所有奇数的和
void fun(int *a,int n,int *odd,int *even)
{
*odd=0;
*even=0;
int i=0;
for(i=0;i<n;i++)
{
if(a[i]%2==0)//*(a+i)%2==0
{
*odd+=a[i];//*odd+=*(a+i);
}
else
{
*even+=a[i]
}
}
}
main()
{
int a[5]={12,24,543,1,4},odd,even;
fun(a,5,&odd,&even);
printf("");

}

指向一维数组元素指针

例子:
编写fun函数把数组a中所有元素与b中所有元素逆序的元素之和存放在数组c中

void fun(int *a,int n,int *b,int *c)
{
int i,j;
for(i=n;i>0;i--)
{
c[i]=a[i]+b[n-i-1];
//或者*(c+i)=*(a+i)+*(b-1-i);
}
}

main()
{
int a[5]={1,2,3,4,5},b[5]={2,3,4,5,6},c={0};
fun(a,5,b,c);
for(i=0;i<5;i++)
printf("%d",c[i]);
}

//编写一个函数,把长度为n的数组a中元素左移move位

算法分析:
想要左移move位,那我们先试试移动一位,然后再循环move次,就可以了。
void fun(int *a,int n,int move)
{

int save,i,j;
for(j=0;j<move;j++)
{
save=a[0];//这里只移动了一位
for(i=0;i<n-1;i++)
{
a[i]=a[i+1];
}
a[n-1]=save;
}

}

第73集 指向一维数组元素指针的应用举例
编写一个函数,把一个数n,转换成为二进制,并把二进制中的每一位放在数组a中,函数返回这个二进制的位数。
n=6--->110
a[0]=1
a[1]=1
a[2]=0

int funer(int n,int *a)
{
int i=0,t,m,k,j;
while(n>0)
{
a[i++]=n%2;

n=n/2;

}
for(m=0,k=i-1;m<k;m++,k--)
{
t=a[m];
a[m]=a[k];
a[k]=t;

}
return i;
}
main()
{
int a[100],n,len;
printf("请输入一个整数:");
scanf("%d",&n);
len=funer(n,a)
for(i=0;i<len;i++)
printf("a[%d]=%d",i,a[i]);
}

//将大于整数m且紧靠m的k个素数,存放在数组x中
int isPrimer(int n)
{
int i;
for(i=2;i<n;i++)
{
if(n%i==0)//发现有一个数能被n整除
{
return 0;//不是素数
}

}
return 1;

}
void fun5(int m,int k,int *x)
{
int i=0,j=0;
while (j<k)
{
if(isPrimer(++m))
{
x[i++]=m;
j++;
}
}
for(int s=0;s<k;s++)
printf("%4d",x[s]);
}

main()
{
int a[100]={0},n,k=5;
printf("输入一个整数给n:");
scanf("%d",&n);
fun5(n,k,a);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: