//通过地址的调用来改变变量的值
#include<stdio.h>
void f(int *p);
void g(int k);
int main()
{
int i = 6;
printf("&i=%p\n", &i);
f(&i);
g(i);
getchar();
return 0;
}
void f(int *p)
{
printf(" p=%p\n ", p); //p是一个地址
printf("*p=%d\n", *p); //*p作为一个整体是一个整数
*p = 26; //此时,通过调用地址*p,改变了i的值。
}
void g(int k)
{
printf("k=%d\n", k);
}
&i=0063FE9C
p=0063FE9C
*p=6
k=26
区分内存单元的内容和内存单元的地址
C语言使用指针对变量的地址进行操作
定义一个变量P,它位于2000单元,该单元存放了变量x的地址1000。此时,取出变量P的值1000.就可以访问内存1000单元,实现对变量x的操作,也就是通过变量P,可以间接访问变量x。
如果一个指针变量的值是另一个变量的地址,就称该指针指向那个变量。
指针变量的定义
类型名 *指针变量名;
例如: int *p; //p是指针变量,*p是整形变量。
指针的类型指的是指向变量的数据类型,指针变量要先赋值再使用。
指针的基本运算
1.取地址运算和间接访问运算
int *p,a=3;
p=&a;
将整形变量的地址赋给整形指针p,使指针p指向变量a。
*除了被用于定义指针以外,还被用于访问指针所指向的变量。
p指向a时,*p和a访问的时一个存储单元,* p的值就是a的值。
//取地址运算和间接访问运算示例
#include<stdio.h>
int main()
{
int a=3,*p;
p=&a; //a的地址赋给了p
printf("a=%d,*p=%d\n",a,*p);//*用来访问指针指向的变量
*p=10; //访问变量地址,给变量赋值为10,改变了该地址所存储的变量
printf("a=%d,*p=%d\n",a,*p);
printf("enter a: "); //同理
scanf("%d",&a);
printf("a=%d,*p=%d\n",a,*p);
(*p)++; //将指针p所指向的变量值加一
printf("a=%d,*p=%d\n",a,*p);
return 0;
}
a=3,*p=3
a=10,*p=10
enter a: 5
a=5,*p=5
a=6,*p=6