指针
指针
p=&a 使指针变量p与普通变量a相关联,也就是p指向a
*p=a 即为赋予p a的值
使用
#include<stdio.h>
int main(){
int a=3,*p=&a;
printf("%d\n",*p);//输出指针指向的变量值
printf("%d\n",p);//访问指针的内存地址空间
/*3
6553224
*/
}
赋值
#include<stdio.h>
int main(){
int a=2,j=3,arr[5]={1,2,3,4,5};
int *p,*p1=&a;
printf("%d\n",*p1);
p=&j;
printf("%d\n",*p);
//*p=&j;不能单独这样定义,会报错
// int *p; p=&j;上述这两种方法效果一样
p=arr;//将数组起始(也就是arr[0])地址赋值给p
printf("%d\n",*p);
p=&arr[2];//将数组中的某个元素赋值给指针
printf("%d\n",*p);
}
注:
- 指针的类型要与指针变量类型一致
- 可以用null或0给指针赋值,不能用具体数值或非地址表达式(p=i+5)来给其赋值
运算
#include<stdio.h>
int main(){
int arr[5]={1,3,5,7,9};
int *p;
p=arr;
printf("%d\n",p);//6553208
printf("%d\n",*p);//1
p++;
printf("%d\n",p);//6553212
printf("%d\n",*p);//3
p--;
printf("%d\n",p);//6553208
printf("%d\n",*p);//1
//在运算过程中会加减相应数据类型所占用的字节数,每个类型会不一样
//*p会相应指向下一个或上一个元素
}
- 在指针指向数组时,允许使用++,--的运算,指向前一个或后一个元素
- 两个指针只有在这两个指针指向同一个数组中的元素时,才可以进行减法运算
- 指针的数值可以改变
指针的比较运算
指针变量与一维数组
#include<stdio.h>
int main(){
int *p,a[]={1,3,5};
//指针=&数组名[某数]
p=&a[1];
//*指针=指针指定的变量的值
printf("%d\n",*p);
//指针+1=&数组名[某数+1]
//p+1=&a[0+1];
//&数组名[某数]相当于数组名+某数
p=&a[1];//相当于a+1
//数组名[某数]相当于*(数组名+某数)
*p=a[1];//相当于*(a+1)
//因为a相当于a[0]
}
指针变量与二维数组
#include<stdio.h>
int main(){
int a[3][4]={};
/*
指针=&数组名[i][j]
指针=指针指定的变量的值
指针+i=&(数组名[i][j]后面第i个元素)
&数组名[i][j] 相当于 数组名[i]+j
也相当于数组名[0]+i*列数+j
&a[1][2]相当于a[i]+2
也相当于a[0]+i*4+2
数组名[i][j]相当于*(数组名[i]+j)
*/
}

浙公网安备 33010602011771号