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