指针引用数组----恶补之二

int a[10]={1,3,4,5,6,8,9,0,32,23};
int *p;
p=&a[0];//int *p=&a[0]//int *p=a;
指针指向数组元素时,可以进行加减运算
当两个指针相减,如p1-p2(只有它们都指向同一数组中的元素时才有意义)
p+1指向同一数组种的下一个元素,p-1则是上一个(加一是加上数组元素所占用的字节数)

*(p+5),  * (a+5)和a[5]等价

(3)用指针变量指向数组元素

#include<stdio.h>
int main()
{
    int a[10];
    int *p,i;
    printf("please input ten numbers:");
    for(p=a;p<(a+10);p++)
    {scanf_s("%d",p;} 
    for(p=a;p<(a+10);p++)
    printf("%d",*p);
    printf("\n");
    system("pause"); 
    return 0;
}

当用数组名作为参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化。
C编译都是将形参数组名作为指针变量来处理的。
例8.8 将数组a中n个整数按相反顺序存放。

#include<stdio.h>
int main()
{
    void inv(int x[],int n);
    int i,a[10]={3,7,9,11,0,6,7,5,4,2};
    printf("The original array :\n");
    for(i=0;i<10;i++)
    printf("%d",a[i]);
    printf("\n");
    inv(a,10);
    printf("The array has been inverted :\n");
    for(i=0;i<10;i++)
    printf("%d",a[i]);
    printf("\n");
    system("pause");
    return 0;
}
void inv(int x[],int n)
{   
    int i,temp;
    for(i=0;i<n/2;i++)
    {
        temp=x[i];
        x[i]=x[n-i];//Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.错误说明我a越界了,很明显我出现了一个x[10];
        x[n-i]=temp;
    }
}
//下面这个void是对的
void inv(int x[], int n)
{
    int i, temp,j=(n-1)/2;
    for (i = 0; i<=j; i++)
    {
        temp = x[i];
        x[i] = x[n-1-i];
        x[n -1- i] = temp;
    }
}

因为形参数组名实际上是一个指针变量,并不是真正的开辟一个数组空间(定义是参数组时必须指定数组大小,因为要开辟相应的存储空间)

void inv(int *x,int n)
{
    int *p,temp,*i,*j,m=(n-1)/2;
    i=x;j=x+n-1;p=x+m;
    for(;i<=p;i++,j--)
    {
        temp=*i;*i=*j;*j=temp;
    }
    return;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值