#include <stdio.h>
int main(void)
{
//注:指针=地址,指针就是地址,地址就是指针,只是名字不同而已。
int * p; //p是变量的名字,int * 表示该变量p指向存放int类型变量的地址
//int * p; 不表示定义了一个变量为*p的整型变量,而是定义了一个int*类型的变量p
//int *p; 应该这样理解,定义了一个变量名p,他的类型是int*类型,实际上就是存放了一个类型为int的地址
int i=3;
// i是整型,因此指向变量i的指针变量p也必须是指向存放整型变量的地址。也就是说i是int类型,那么p就必须是int *类型。
p=&i;
/* 1、p保存了i的地址,也就是说p指向了i
2、p是个指针变量,而i是一个整型变量,故p不等于i,也就是说修改p的值不影响i的值,修改i的值不影响p的值
3、如果类型为int*的变量p指向了某个普通的变量,也就是说p保存了普通变量i的地址 *p 等价于 i :在程序当中出现*p的地方都可以用i来替换,出现i的地方都能够用*p来替换,*p与i 是完全等价相同的。
4、*p与p是俩表示的意思是完全不一样的。*p与i等价,p与&i完全等价。
*/
return 0;
}
/* 指针和指针变量:(指针是一个值(常量),指针变量是用来存放指针的.他是一个变量) 指针:指针就是一个地址,地址是存储变量内存单元的编号(一般都是16进制)。故指针他是一个值,当你定义一个变量的时候, 系统会自动分配一个内存单元,内存单元是用来存储变量的值。但是这个内存单元有一个编号,这个编号就是地址。也就是指针。
而指针变量:指针变量就是用来存储指针的,是一个变量。
比喻:酒店的房间606号房间。606就是该房间的编号,也就是地址。也是指针。你去开房就相当于给你分配了一个内存空间。而指针变量就是用来存放 房间号的,比如说有606,607,608等等。而房间里面的客人就是值,指针指向的值。
*/
/*
*p:我谈谈对*的理解: *: 降级的意思。也就是说有*的话,你可以理解成降级,p是地址,*p就是通过*进行降级,从内存单元的编号降级到内存单元里面的值。也就是地址 内的值。地址降级是值。行降级是列。p:地址,*p:降级是值,&(*p)=&i,
*/
指针经典程序案例:
#include<stdio.h>
int main(void)
{
int a=3,b=5;
swap_1(a,b); //该调用时错误的
printf("a=%d b=%d ",a,b); //a=3,b=5
swap_2(a,b); //该调用时错误的
printf("a=%d b=%d ",a,b);//a=3, b=5
swap_3(a,b); //正确
printf("a=%d b=%d ",a,b);//a=5,b=3
return 0;
}
void swap_1(int a, int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void swap_2(int * p, int * q)
{
int * temp;
temp=p;
p=q;
q=temp;
}
void swap_3(int * p, int * q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}