指针

因为指针比较难调,所以以前从来没用过。但是今天了解到有一个神奇的省空间的方法:动态数组 就像这段代码

#include<iostream>
#include<cstdio>
using namespace std;
int a[101],n;
int main()
{
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
  {
    scanf("%d",&a[i]);
  }
  int *p=&a[1];
  for(int i=1;i<=n;i++)
  {
    printf("%d",*p);
    p++;//重点
  }
  return 0;
}

动态数组前缀和:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,*a;
    scanf("%d",&n);
    a=new int[n+1];
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=2;i<=n;i++)
    {
        a[i]+=a[i-1];
    }
    for(int i=1;i<=n;i++)
    {
        printf("%d",a[i]);
    }
    return 0;
}

第二项操作:双重指针:**p,用于二维动态数组 、、有待完善

第三项操作:auto指针

#include<iostream>
#include<cstdio>
using namespace std;
int a=10;
double b=3.5;
void *p;//重点
int main()
{
    p=&a;
    cout<<*(int*)p<<endl;
    p=&b;
    cout<<*(double*)p<<endl;    
    return 0;
}

第四项操作:数组上重点!!!

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int a[5],i,*pa;//等于在下一行pa=a;
    for(i=0;i<5;i++)
    {
        scanf("%d",a+i);//等于 pa+i 或 &a[i]
    }
    for(i=0;i<5;i++)
    {
        printf("a[%d]=%d\n",i,*(a+i));//这阵访问数组,可写成*(pa+i)或a[i]或pa[i]
    }
    return 0;
}
posted @ 2021-12-02 16:31  fervency  阅读(11)  评论(0编辑  收藏  举报