指针使用
一:
//1.定义一个整型变量a,输出a的地址和值。
//2.定义一个指向整型变量a的指针ptr,输出指针ptr的值以及指针所指向的变量a的值。
//3.修改指针ptr的值,使其指向变量a的地址-1,并输出ptr的值和所指向的变量的值。
//4.定义一个整型数组arr,输出数组的首地址和第一个元素的地址以及值。
//5.定义一个指向数组arr的指针p,输出指针p的值以及所指向的数组元素的值。
//6.修改指针p的值,使其指向数组arr的第二个元素,输出指针p的值以及所指向的数组元素的值。
//7.定义一个指向指针p的指针pp,输出指针pp的值以及所指向的指针p的值和指向的数组元素的值。
#include<stdio.h>
int main(){
int a=0;
printf("&a=%p,a=%d\n",&a,a);
int*ptr=&a;
printf("ptr=%p,*ptr=%d\n",ptr,*ptr);
ptr=ptr-1;
printf("ptr=%p,*ptr=%d\n",ptr,*ptr);
int arr[]={1,2,3,4};
printf("arr=%p,arr=%p,*arr=%d\n",arr,arr,*arr);
int*p=arr;
printf("p=%p,*p=%d\n",p,*p);
p=p+1;
printf("p=%p,*p=%d\n",p,*p);
int**pp=&p;
printf("pp=%p,*pp=%p,**pp=%d\n",pp,*pp,**pp);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/1fbce3853b58c6657c2000236bafed6b.png)
二:
/*1.創建一个名力"pointer_array_experiment.c"的
C语言源文件。
2.定义一个整型数组"array",长度为5,并初始化
为1,3,5,7,9
3.定义一个指向整型数的指针"p",并让它指向数
组的第一个元素。
4.输出数组中每个元素的值。
5.循环遍历数组,使用指针p访问数组中的每个元素,并将每个元素的值加2。
6.再次输出数组中每个元素的值。
7.编译并运行程序,检查输出结果是否正确。*/
#include<stdio.h>
int main(){
int array[]={1,3,5,7,9};
int*p=array;
int i;
for(i=0;i<5;i++){
printf("%d ",array[i]);
}
printf("\n");
printf("%d,%d,%d,%d,%d\n",*p,*(p+1),*(p+2),*(p+3),*(p+4));
printf("%d,%d,%d,%d,%d\n",*p+2,*(p+1)+2,*(p+2)+2,*(p+3)+2,*(p+4)+2);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6e9e9b2ae19cd075163d79e803cef279.png)
三:
/*1. 编写一个C语言程序。
2. 在程序中声明一个整型变量和一个指向整型变量的指针变量。
3. 初始化这个整型变量和指针变量。
4. 输出这个整型变量和指针变量的地址。
5. 使用指针变量修改整型变量的值。
6. 输出修改后的整型变量的值。
7. 比较指针变量和整型变量的地址。
8. 使用指针变量交换两个整型变量的值。
9. 使用不使用指针变量的方法交换两个整型变量的值。*/
#include<stdio.h>
void fun(int*a,int*b ){
int c;
c=*a;
*a=*b;
*b=c;
}
int main(){
int a=4,b=5;
int*p=&b;
printf("&a=%p,p=%p\n",&a,p);
printf("修改后:*p=%d\n",*p-3);
fun(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/f959d1dfe56e24d593cfabb0cb25ddad.png)
总结:
指针类型保存数据对象的首地址和数据对象所占用的存储空间大小;
指针类型的值就是目标数据对象的首地址,指针类型本身标记目标数据对象的空间大小;
取地址运算符&:可获取一个数据对象的首地址和所需存储的空间大小;
取值运算符*:可以根据指针中所存储的首地址和存储空间大小找到目标数据对象的值;
占位符%p:是指针类型专用的占位符,以十六进制显示;
int *pn;
*(pn-1):指pn的首地址向前移动4个字节后所代表的数值;
*pn-1 :指*pn的值减一;
7.指针类型-指针类型=两首地址相减除以步长;
8.类型为void类型的指针只保存首地址,不保存存储空间大小,所以不能对void类型的指针取值,也不能进行与整型的加减法;
9.任意类型指针都可以直接赋值给void 型指针;