#include< stdio. h>
void huhuan_1 ( int , int ) ;
void huhuan_2 ( int * , int * ) ;
void huhuan_3 ( int * , int * ) ;
int main ( )
{
int a = 3 , b= 5 ;
huhuan_3 ( & a, & b) ;
printf ( "a=%d,b=%d" , a, b) ;
return 0 ;
}
void huhuan_1 ( int p , int q)
{
int t;
t = p;
p = q;
q = t;
}
void huhuan_2 ( int * p, int * q)
{
int * t;
t = p;
p = q;
q = t;
}
void huhuan_3 ( int * p, int * q)
{
int t;
t = * p;
* p = * q;
* q = t;
}
如何通过被调函数修改主调函数普通变量的值
1. 实参必须为该普通变量的地址
2. 形参必须为指针变量
3. 在被调函数中通过* p= . . . 的方式就可以修改主调函数相关变量的值
#include <stdio.h>
int main ( void )
{
int i = 5 ;
int * p, * q;
p = & i;
q = p;
printf ( "%d\n" , * q) ;
return 0 ;
}
指针和数组
#include <stdio.h>
void f ( int * pArr, int len) ;
int main ( void )
{
int a[ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
f ( a, 5 ) ;
return 0 ;
}
void f ( int * pArr, int len)
{
int i;
for ( i = 0 ; i < len; ++ i)
{
printf ( "%d " , * ( pArr + i) ) ;
}
printf ( "\n" ) ;
}
# include <stdio.h>
int main ( void )
{
int a[ 5 ] ;
int b[ 5 ] ;
printf ( "%#X\n" , & a[ 0 ] ) ;
printf ( "%#X\n" , a) ;
return 0 ;
}
1. 一维数组名是一个指针常量,它存放的是一维数组第一个元素的地址
2. 下标和指针的关系若p是一个指针变量则p[ i] = * ( p+ i)
3. 确定一个一维数组需要两个参数:
a: 数组第一个元素的地址
b: 数组的长度
void f ( int * p)
{
* p = 10 ;
}
int main ( void )
{
int i = 5 ;
f ( & i) ;
printf ( "i=%d\n" , i) ;
return 0 ;
}
#include <stdio.h>
int main ( void )
{
int i = 5 , j = 10 , * p = & i, * q = & j;
int a[ 5 ] ;
p = & a[ 1 ] ;
q = & a[ 4 ] ;
printf ( "p和q所指向的单元相隔%d个单元\n" , q - p) ;
return 0 ;
}
1. 指针变量不能相加 不能乘除
2. 如果两个指针变量指向的是同一块连续空间的不同储存单元
则这两个指针变量才可以相减
#include <stdio.h>
int main ( void )
{
int i = 10 , * p= & i, * * q= & p, * * * r= & q;
printf ( "i=%d\ni=%d\ni=%d\n" , * * * r, * * q, * p) ;
return 0 ;
}
1. p只能存放int 类型变量的地址
2. q是int * * 类型,so ,q只能存放int * 类型的地址
2. r是int * * * 类型所谓的int * * * 类型就是r只能存放int * * 类型变量的地址