指针与指针变量深度理解及程序举例(初学者)
如果已经执行了语句pointer_1=&a;
(1)&*pointer_1的含义是什么?
“&”和“*”两个运算符的优先级相同,但按自右向左方向结合,因此先进行*pointer_1的运算,再执行&运算。
因此,&*pointer_1与&a相同,即变量a的地址。
如果有:pointer_2=&*pointer_1;
它的作用是将&a(a的地址)赋给pointer_2。
(2)*&a的含义是什么?
先进行&a运算,得a的地址,在进行*运算,即&a所指向的变量,即变量a。
*&a和*pointer_1的作用是一样的,他们都等价于变量a,即*&a与a等价。
(3)(*pointer_1)++相当于a++;
注:括号是必要的,如果没有括号,就变成了*pointer_1++,由运算符的优先级与结合方向可知,它相当于*(pointer_1++)。
例:输入a和b两个整数,按先大后小的顺序输出a和b。
#include <stdafx.h>
#include<stdio.h>
void main()
{
int a,b,*p1,*p2,*p;
scanf("%d%d\n",&a,&b);
p1=&a;
p2=&b;
if(a<b)
{
p=p1;
p1=p2;
p2=p;
}
printf("a=%d.b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
例:对输入的两个整数按大小顺序输出,这次用函数实现交换功能。
#include <stdafx.h>
#include<stdio.h>
void swap(int*p1,int*p2);
void main()
{
int a,b;
int*pointer_1,*pointer_2;
scanf("%d%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
{
swap(pointer_1,pointer_2);
}
printf("\n%d>%d\n",a,b);
}
void swap(int*p1,int*p2)
{
int temp;
printf("swapping");
temp=*p1; //temp=a;
*p1=*p2; //a=b;
*p2=temp; //b=temp;
}
例:输入a,b,c三个整数,按大小顺序输出。
#include <stdafx.h>
#include<stdio.h>
void swap(int*pt1,int*pt2);
void exchange(int *q1,int *q2,int *q3);
void main()
{
int a,b,c,*p1,*p2,*p3;
scanf("%d%d%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
exchange(p1,p2,p3);
printf("%d,%d,%d\n",a,b,c);
}
void exchange(int *q1,int *q2,int *q3)
{
if(*q1<*q2)
{
swap(q1,q2);
}
if(*q1<*q3)
{
swap(q1,q3);
}
if(*q2<*q3)
{
swap(q2,q3);
}
}
void swap(int*pt1,int*pt2)
{
int temp;
printf("swapping");
temp=*pt1; //temp=a;
*pt1=*pt2; //a=b;
*pt2=temp; //b=temp;
}
posted on 2019-02-05 23:16 巫师笔记 阅读(...) 评论(...) 编辑 收藏