1.指针和指针变量的区别:
指针是一种用于存储"另外一个变量的地址" 是一个地址
指针变量是 用于存放地址的变量 是一个变量
举例说明:
#include <stdio.h> int main(){ int *pointer_1,a; a=100; pointer_1 = &a; printf("pointer_1的值是:%d\n",*pointer_1); printf("pointer_1的地址是:%d\n",pointer_1); }
在上述例子中,我们定义了一个int类型的指针变量 pointer_1 和 变量a;
首先,给a赋值,然后将a的地址赋值给pointer_1,
这时,我们就可以称pointer_1为指针变量,而a的地址则称之为指针
那也就可以说,指针变量pointer_1的值是地址,即指针
2.指针变量的定义:
类型名 * 指针变量名;
int *pointer_1; int指针
float *pointer_2; float指针
char *pointer_3; char指针
指针类型是根据基本数据类型派生出来的,它不能离开基本类型而独立存在;
因为每个基本型在内存中所占的大小是不同的,当我们移动指针时,指针会根据类型所占内存的基本大小来移动。
举例:
#include <stdio.h> int main(){ int *pointer_1,a; char *pointer_2,c; a=100; c='s'; pointer_1 = &a; pointer_2 = &c; printf("pointer_1的值是:%d\n",*pointer_1); printf("pointer_1的地址是:%d\n",pointer_1); printf("pointer_2的值是:%c\n",*pointer_2); printf("pointer_2的地址是:%d\n",pointer_2); pointer_1 =pointer_1+1; printf("pointer_1指针增加1后的位置是:%d\n",pointer_1); pointer_1 =pointer_1+3; printf("pointer_1指针增加3后的位置是:%d\n",pointer_1); pointer_2 =pointer_2+1; printf("pointer_2指针增加1后的位置是:%d\n",pointer_2); pointer_2 =pointer_2+3; printf("pointer_2指针增加3后的位置是:%d\n",pointer_2); }
结果:
pointer_1的值是:100 pointer_1的地址是:2293568 pointer_2的值是:c pointer_2的地址是:2293563 pointer_1指针增加1后的位置是:2293572 pointer_1指针增加3后的位置是:2293584 pointer_2指针增加1后的位置是:2293564 pointer_2指针增加3后的位置是:2293567 请按任意键继续. . .
在上述例子中,我们定义了一个int类型了指针,和char类型的指针, 因为int类型和char类型,在内存中所占的大小分别是4字节和1字节。
所以,我在移动指针的之后,指针在内存中所处的位置也会相应的变化,
当然,我这里并没有对变化后的指针进行取值操作,即*操作,应为它所处的地址并没有赋值操作,默认为0;
3.指针的引用
int *p,a;
(1)给指针变量赋值
p = &a;
把a地址赋给指针变量p
(2)引用指针变量指向变量
*p=1
指针变量p指向变量a,相当于把1赋值给a
(3)引用指针变量的值
printf("%o",p)
以8进制形式输出指针变量p的值,即a的地址,&a
& 取地址运算符
* 指针运算符
指针应用小例子
输入a,b两个整数,按先大后小顺序输入a和b。
用指针实现
#include <stdio.h> int main(){ int *p1,*p2,*p,a,b; printf("please enter two integer numbers:"); scanf("%d,%d",&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); return 0; }
上述例子中,我们用两个指针分别存取了两个变量的地址,然后比较变量的大小,并交换指针所引用变量的地址。
最后,输出指针变量的所引用变量的值!