目录
小樽C++ 多章⑧ (壹) 指针变量https://blog.csdn.net/weixin_44775255/article/details/129031168
小樽C++ 多章⑧ (叁) 指针与字符串、(肆) 函数与指针https://blog.csdn.net/weixin_44775255/article/details/129397866
1.C++中数组变量名某些情况可以看成是指针
#include<iostream>
using namespace std;
// 1.用数组名访问数组
int a[]={10,11,12,13,14,15};
int *p=a+1;
int main(){
cout<<*a<<endl; //默认输出第一个
cout<<*(a+2)<<endl;
cout<<*(++p)<<endl;
return 0;
}
- *a代表,初始指向 a[0]位置,也就是10。
- *(a+2) a+2代表 数组a地址往后挪2位,也就是a[2]的地址, 指针就指向12。
- *p = a+1, 那p指向a[1]的地址,++p 那就指向a[2]的地址,*(++p)就是a[2]的值12。
- 可以发现,数组变量a可以当作指针使用,默认指向第一个数组元素!
- 指针是动态的数据结构、数组是静态数据结构。指针在C语言的输入语句就用到了。接下来我们了解下C语言的输入scanf,输出printf。
2.C语言的scanf 输入语句,printf 输出语句
用C语言的输入输出前要导入库:include<cstdio> //c语言的标准IO
输出格式:printf(“格式控制字符串” , 输出列表)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
// 输出用法例子
printf("整数:%d,长整数:%ld\n",100*1234,1+3*10000000);
printf("单精度:%f,双精度:%lf\n",1.5*1234,1+3*1.55);
printf("保留2位:%.2f, 9个占位并保留3位:%9.3f\n",3.14*1422,3.14159*3);
printf("字符:%c, 字符串:%s",'A',"abccd");
// 输入用法例子
int a;
double b;
float c;
scanf("%d%lf%f",&a,&b,&c);
printf("a=%d b=%lf c=%f",a,b,c);
return 0;
}
scanf 使用数组名
//2.scanf使用数组名
#include<iostream>
#include<cstdio>
using namespace std;
int a[5];
int main(){
for(int i=0;i<5;i++){
scanf("%d",a+i); //a+i就是地址,a+0,a+1,a+4等地址
}
for(int i=0;i<5;i++){
// cout<<*(a+i)<<" ";
printf("a[%d]=%d\n",i,a[i]); //a[i]就是 *(a+i)
}
return 0;
}
3.用指针来当动态数组
什么是动态数组? 数组空间长度可以变,不固定。
用指针来当数组可实现动态变化。
例如:求数组元素的和。
//3.指针也可以看成数组名
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int *a; //指针变量a当数组名使用
int main(){
scanf("%d",&n);
//指针变成数组怎么写?
a = new int[n+1]; // 申请连续的n+1片的空间给指针a
for(int i=0;i<5;i++){ // 输入值到数组
scanf("%d",&a[i]);
}
for(int i=1;i<5;i++){ // 求和运算
a[i] = a[i] + a[i-1];
}
for(int i=0;i<5;i++){ // 输出结果
printf("%d ",a[i]);
}
return 0;
}