指针变量的含义:用来存放地址的变量
使用格式:int* p = &a; //存放变量a的地址为p(取a的地址为p)
其中*为解引用操作符,又叫间接访问操作符。
(指针变量前的变量形式应该与被取地址的变量形式一致)
打印地址是所用的格式应为%p
下面举个例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 20;//定义变量a 的值为20;
int* p = &a;//取a的地址p;
printf("%p\n",&a);//打印a的地址,等价于printf("%p\n",p)
*p = 10;//将a的值改为10;
printf("%d\n",a);//检查a的值是否发生改变
}
. 结构变量.成员
-> 结构体指针->成员
就是说(*p).name等价于p->name
举个例子
#include <stdio.h>
#include <stdlib.h>
struct BOOK
{
char name[500];
short price;
};
int main()
{
struct BOOK b1 = {"优快云",20};
struct BOOK* p = &b1;
printf("%s\n",(*p).name);
printf("%s\n",p->name);
return 0;
}
这样打印出来都是书名“优快云”
指针做函数参数时的格式应该是这样的:
#include <stdio.h>
#include <stdlib.h>
void swap(int *p1,int *p2)
{
int t;
t = *p2;
*p2 = *p1;
*p1 = t;
}//这个函数是换掉地址里面的数值的函数
int main()
{
int a = 10;
int b = 20;
int* p1 = &a;
int* p2 = &b;
printf("%p\n",p1);
printf("%p\n",p2);
swap(p1,p2);
printf("%p\n",p1);
printf("%p\n",p2);
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",*p1);
printf("%d\n",*p2);
swap(&a,&b);
printf("%p\n",p1);
printf("%p\n",p2);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}//p1与p2的地址不进行交换,打印的数字结果是20,10 20,10 10,20
#include <stdio.h>
#include <stdlib.h>
void get_values(int a,int b,int *r1,int *r2,int *r3)//这里的*r1是指针型变量,是个变量(类似于int x里面的x)
{
*r1 = a + b;//这里的*r1是变量r1所在地址的值
*r2 = a - b;
*r3 = a * b;
}
int main()
{
int a = 10;
int b = 20;
int v1,v2,v3;
get_values(a,b,&v1,&v2,&v3);//这一步的意思是说,把v1的地址给到指针型变量r1,即为变量r1赋值
printf("%d\n",v1); //r1用的是v1的地址
printf("%d\n",v2);
printf("%d\n",v3);
}