了解C语言之指针(二)

来源:互联网 发布:linux os update 编辑:程序博客网 时间:2024/04/30 01:59

四、指针变量的运算

指针变量可参与3种运算:赋值运算、算术运算和关系运算

赋值运算:

float c, *p, *q;

p=&c;

q=p;

int i ,*p;

i=3; p=&i;

*p++*++p:引用下一元素的值

*p++çè*(p++)

*++pçè*(++p)

 

char i ,*p;

p=&i;

printf("%d",p);

p=p+2;

printf("%d",p);

一个指针变量的值加上一个整数n,则为一个新的地址,地址值为原值+整数*类型字节数。指向其后的第n个数据。

q-p=?

若是:int *p,*q; 则为

1

若是:char *p,*q;则为

2

 

一个指针变量的值减去另一个指针 变量的值为两个地址间的数据个数

指针的关系运算:

指针的关系运算即比较指针(地址)大小的运算。

其含义如下:

if(p<q) printf ("p在内存中q的低端。" );

if(p==q) printf ("pq指向同一存储单元。" );

if(p==‘’)printf ("p指向NULL" );

p=NULL(给指针变量赋空值)

五、 指针变量的初始化

#include <stdio.h>

void main( )

{

int *p, *q, a;

p=&a; q=p;

*p=3;

(*q)--;

}

 

六、指针作为函数的参数 可以加下群466572167(群内有各种项目学习资料)

读下列程序,写出运行结果

void swap(int p, int q)

{ int t;

t=p; p=q; q=t;

}

main( )

{int a=3,b=4;

swap(a, b);

printf("%d,%d",a,b);

}

运行结果:34

 

想一想:

普通变量做实参时,在被调函数中对形参的修改不会影响实参值。如何真正通过被调函数改变实参变量的值?

1)全局变量

2)数组做形参

3)指针变量做形参

例:

void swap(int *p, int *q)

{ int t;

t=*p;*p=*q;*q=t;

}

main( )

{ int a=3,b=4;

swap(&a,&b);

printf("%d,%d",a,b);

}

运行结果:43

 

结论:利用指针变量做函数参数,可以得到多个变化的值, 而非一个函数值。

1、指针变量做形参时,对应实参为数据类型与该指针变量基类型相同的变量的地址

2、指针变量做形参时,参数传递的形式仍为单向值传递

3、在函数调用过程中,通过对实参变量的间接访问,改变了对应实参的值。

swap(int *p,int *q)

{int *t;

t=p;p=q;q=t;

}

main( )

{ int a=3,b=4;

swap(&a,&b);

printf("%d,%d",a,b);

}