指针

C语言中用&运算符表示取变量的地址。例如变量x的地址可以表示为&x。指针变量P指向x,p=&x。

#include<stdio.h>
void swap(int *x,int *y);
void main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("&a=%x,&b=%x\n",&a,&b);
    printf("调用前:a=%d,b=%d\n",a,b);
    swap(&a,&b);
    printf("调用后:a=%d,b=%d\n",a,b);
}
void swap(int *x,int *y)
{
    int t;
    printf("\n------swap------\n",x,y);
    printf("x=%x,y=%x\n",x,y);
    t=*x;
    *x=*y;
    *y=t;
    printf("------swap------\n\n",x,y);
}

1、在程序中`swap(&a,&b);完成函数的调用,它将变量a和b的地址&a、&b作为实参传给子函数swap中的形参x,y,其参数传递为单向值传递,由于x和y是指针变量,所以传递后指针x中存放a的地址,即使x指向a,同理y中存放的为b的地址,使y指向b。
2、在子程序中执行交换语句中,通过指针x和y间接访问变量a和b。在子程序中执行了将a的值存入t中(通过指针x间接访问a);将b存入a中(通过指针y间接访问b)将t存入b中实现了a和b的值交换。
3、当子程序执行完,程序释放形参x,y和局部变量t的存储空间,返回主函数,主函数中变量a,b的值为交换后的结果。

指针变量的声明:基本类型 * 指针变量名
指针变量的定义包括三个内容
1、符号*:表示所定义的变量是指针变量。
2、指针变量名:同普通变量,应为合法标识符,编译时需要为其分配内存空间。
3、基本类型:指针变量所指向的数据类型。
例如:

int *p;//p是指向整型的指针变量。
double *q;//q是指向浮点型的指针变量。

指针变量的声明方式

int *p;

指针变量的初始化
当我们定义一个指针变量的变量后,第一次把变量的地址赋值给指针变量的过程称为指针变量的初始化。例如:int *p,x;p=&x;int x,*p=&x;
变量x必须在指针变量p声明前声明。语句
int *p=&x,x`是错的。

指针变量的赋值,
1、对指针变量的赋值需要保持数据类型的一致。
例如:

float x;
int *p;
p=&x;//是错误的。

2、不能将一个常数值赋值给指针变量。
例如:

int *p;
p=3000;//错误,因为3000是整型常量,不是一个整数变量的地址。

3、指针变量可以被赋值为null或0。
例如:

int *p;
p=null;
p=0;
/*指针变量被赋值为null或者0时,称这样的指针为空指针,它不指向任何地址空间,但除了NULL0外,其它任何常量都不能赋值给指针变量。*/

4、&取地址运算符,指针变量的存储单元中存放的是它所指向变量的地址,为指针变量赋值时应注意&后必须是已声明的变量名。
例如:

int *p;
p=&123;//错误,操作数为常量是错误的。
p=&(x+y);//错误,操作数为表达式是错误的。

5、允许使用赋值运算符进行指针的赋值运算,指针的赋值运算使两个指针指向同一个变量,但前提是两个指针必须具有同一个数据类型。
例如:

int *p,*q,x=5;
p=&x;
q=p;
q=p;//是将p所指向变量的地址赋值给q。
*q=*p;//是将p所指向变量的值赋值给q所指向的变量。

指针变量规则:
1、只有变量的地址才能存储在指针变量中。
2、对指针变量的赋值需要保持数据类型一致。
3、不要把常数和变量的值赋值给指针变量。
4、指针变量在引用前必须初始化。
5、只有相同的指针彼此可以相互赋值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值