很早以前上大一的时候接触过C语言的时候就听说过指针,当时也没深入学习,老师也没做太多要求,所以最后也就没管,后来大二之后就学java了。到现在整个大学期间也就是考了三次软考的时候学了一些C,正好考研的时候需要用到C,所以就学了本很基础的书一直在看,算是做个小总结。实际上指针不是多么难的东西,只不过才接触编程的时候本来就抽象,指针更是在抽象之上的抽象了,尤其在声明的时候就开始纠结……不过习惯了都是一样的东西就是写法有点小区别。所以这篇博客一些简单的就不描述了。
指针与数组以及指针的声明赋值
int a[5],* p,i;
//int * p,int *p 在这里*挨着谁都可以,哪怕 int * p也行
//p就是个指针变量,用来指向某地址
p=&a[0];//指向a中第一个元素的地址
p=a;//同样是指向a中第一个元素的地址,数组名表示第一个元素的地址
//赋值
for(i=0;i<5;i++){
scanf("%d",p++);
}
//输出,*表示输出指针变量对应的地址里的
for(i=0;i<5;i++){
//printf("%d\n",a[i]); //a[0]与*p等价
printf("%d\n",*p++);
}
指针的灵活使用:
int a[5]={1,2,3,4,5},b[10],*p=a,*t=b;
for(i=0;i<10;i++){
if(i==5) p=a;
*t++=*p++;
}
//b的结果为1234512345
数组作函数参数,与指针变量混用
//两个函数
void f1(int a[]){
int i;
for(i=0;i<5;i++){
printf("%d",*a++);
}
}
void f2(int* a){
int i;
for(i=0;i<5;i++){
printf("%d",*a++);
}
}
int a[5]={1,2,3,4,5};
int *p=a;
f1(a);
p=a;
f1(p);
f2(a);
p=a;
f2(p);
//上述代码均输出12345
//只是数组的一些特殊用法而已,数组和指针作形参以及实参,各自的功能差不多