取值操作符*;取址操作符&;
int i=2000;
int *pointer;//定义指针
pointer=&i;//取址
printf("%d\n",*pointer);//取值
变量的指针:是变量的地址;用于存放变量地址的变量是:*指针变量;指针变量只能存放地址,地址运算符&表示变量的地址;
/*通过指针变量访问整型变量*/
#include<stdio.h>
void main()
{
int a,b;//变量
int *pointer_1,*pointer_2;//指针变量
a=100;b=10;//变量赋值
pointer_1=&a;//指针变量附地址
pointer_2=&b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pointer_1,*pointer_2);//指针变量的取值操作符
//间接取值
}
执行pointer_1=&a;后:
&*pointer_1(右结合)==&a;
(*pointer_1)++==a++;括号是必要的,++与*优先级别同;
#include<stdio.h>
void main()
{
int *p1,*p2,*p,a,b;
scanf("%d,%d",&a,&b);
p1=&a;//p1指针
p2=&b;//p2指针
if(a<b)
{
p=p1;
p1=p2;
p2=p;
}//p1指向b,p2指向a
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
#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;//p1指针
pointer_2=&b;//p2指针
if(a<b)
{
swap(pointer_1,pointer_2);
}
printf("\n%d>%d\n",a,b);
}
void swap(int *p1,int *p2)
{
int temp;
printf("I'm swapping...\nPlease wait~\n");
temp=*p1;//temp=a;
*p1=*p2;//a=b;
*p2=temp;//b=temp;
}
/*abc按从大到小输出*/
#include <stdio.h>
void main()//主函数
{
void exchange(int *q1,int *q2,int *q3);
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)//排序
{
void swap(int *qt1,int *qt2);//注意swap定义在此,编译器从上到下
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;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
数组和指针:p=a同于p=&a[0]
/*输入数组的全部元素*/
#include<stdio.h>
void main()
{
int *p;//定义指针
int i;
int a[10];
//a是数组的首地址,*a是a[0]的值,i表示地址的偏移
//int类型,1个单元4个字节位置
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
//for(i=0;i<10;i++)
//{
//printf("%d",a[i]);/*1.下标法*/
//printf("%d",*(a+i));/*2.通过数组名计算数组地址,找出元素的值*/
//}
for(p=a;p<(a+10);p++)/*3.用指针变量指向数组元素*/
{
printf("%d",*p);
}
}
f (int arr[ ], int n)等价f (int *arr, int n)
#include<stdio.h>
//void reverse(int x[],int n);
void reverse(int *x,int n);
void main()
{
int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("the original array:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
reverse(a,10);
printf("the array has been inverted:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
#if(0)
void reverse(int x[],int n)
{
int temp,i,j,m;
m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;
}
}
#endif
void reverse(int *x,int n)
{
int *p,temp,*i,*j,