文章目录
0. 指针基础----*
,&
,指针在函数间的通信
指针: 指针(pointer)是一个值为内存地址的变量(或数据对象)
0.1 创建并声明指针变量
int val=1;
int* ptr;//声明指针变量为 int型
ptr=&val;//指针ptr指向val的地址
0.1.1 间接运算符(indirection operator) *
间接运算符也称为解引用运算符(dereferencing operator)、
如何理解 *
运算符
int val=1;
int bah=5;
int* ptr;
//使val的值等于bah的方式有
//方式1
bal=bha
//方式2:指针的方式
ptr=&bah
val=*ptr //解引用运算符使用
小结:与指针相关的运算符
-
地址运算符
&
: 后跟一个变量名时,&
给出该变量的地址&nurse 表示变量nurse的地址
-
地址运算符
*
: 后跟一个指针名或地址时,*
给出存储在指针指向地址上的值nurse=22;
ptr= &nurse;//指向nurse的指针
val=*ptr; //把ptr指向的地址上的值赋给val
//执行以上3条语句最终结果会把22赋给val
0.1.2 声明指针
格式:
data_type * valiable_name;
类型说明符(data_type)表明指针所指向对象的类型,星号(*)表明声明的变量是一个指针
实例
int* ptr1;//声明一个指向int类型变量的指针
char* ptr2;//声明一个指向char类型变量的指针
虽然指针所指向的是变量在内存中的地址,但是指针实际上是一个新的类型,而不是整数类型。因此,
%p
用来作为指针这个类型的格式转换说明符
0.2 使用指针在函数间通信
void interChange_pointer(int* u, int* v);
表示需要传入int*
类型指针,而且传入的值会随着计算而发生改变
代码实例
#include<stdio.h>
void interChange_pointer(int* u, int* v);
void interChange_normal(int u, int v);
int main(void)
{
int x = 5, y = 10;
printf("Originally x=%d and y=%d.\n", x, y);
interChange_pointer(&x, &y); //send address to function
printf("Now x=%d,y=%d.\n", x, y);
printf("-----------------\n");
printf("Originally x=%d and y=%d.\n", x, y);
interChange_normal(x, y);
printf("Now x=%d,y=%d.\n",x,y);
getchar();
return 0;
}
void interChange_pointer(int* u, int* v)
{
int temp;
temp = *u;//temp get u's value not u's address
*u = *v;
*v = temp;
}
void interChange_normal(int u, int v)
{
int temp;
temp