C语言指针——如何初始化、使用指针

C语言的重要特色就是指针,可以说不掌握指针就没有掌握C的精华。

指针是什么

简单说,指针就是地址。
我们知道,如果在程序中定义了一个变量,在对程序进行编译的时候,系统就会给这个变量分配内存单元,根据变量的类型分配一定长度的空间来存储。内存区的每个字节都有一个编号,这个就是地址。
举个例子,一个旅馆房间门口挂了一个房间号2008,这个2008就是房间的地址,2008就指向该房间。将地址形象化地称为指针,意思是通过他能找到以他为地址的内存单元。

指针变量

一个变量的地址称为该变量的指针,如果还有一个变量专门地存放另一个变量的地址,则称为"指针变量"。个人习惯把指针看作是C语言中的一种数据类型(实际上不算是),它的值是地址。凡看到定义为int,float等后面加了一个*号的都是指针。

  1. 定义指针变量

类型名 *指针变量名
如: int *p,*pointer;
指针变量定义时候必须指定”基类型“(如int,float,char等)。指针变量的基类型用来指定此指针变量可以指向的变量类型。指针变量是基本数据类型派生出来的类型,他不能离开基本类型而独立存在。
有人可能会问,既然指针变量都是存的地址,为什么还要区分存的是什么数据类型的地址呢?
这是因为,不同的类型的数据在内存中所占的字节数和存放方式是不同的。int数据占4字节,short数据占1字节。如果不指定基类型,只知道地址是2000,无法确定是从2000-2001取出short数据,还是从2000-2003中取出int型数据。

  1. 引用指针变量

引用指针变量可能有三种情况:
1.给指针变量赋值

int a,*p;
p=&a;

2.引用指针变量指向的变量

p=&a;
printf("%d",*p);

如果有*p=1表示将1赋值给p当前所指向的变量。
3.引用指针变量的值

printf("%o",p);

以八进制形式输出指针变量p的值,即地址。
3. 指针作为函数参数

简单说,将某个变量的地址作为参数传入函数。一般是需要对原始变量进行操作的时候使用。还是举那个交换两个变量值的例子。

main(){
	int a=3;
	int b=2;
	swap(a,b);
	printf("a=%d,b=%d",a,b);
}

//将两个变量的值作为参数,这种方法不能交换ab的值
void swap(int a,int b){
	int temp;
	temp=a;
	a=b;
	b=temp;
}
//用地址传递就可以 主函数中调用该函数代码为:swap(&a,&b);
//可以实现交换
void swap(int *a,int *b){
	int temp;
	temp=*a;
	*a=*b;
	*b=temp;
}
/*以上两种大家都比较熟悉,下面再看一种,这种方法能不能实现ab值的交换*/
void swap(int *a,int *b){
int *temp;
temp=a;
a=b;
b=temp;
}

上面这个方法也是不能实现ab值的交换的,其实这与第一种方法原理是相同的,虽然我们是将ab的地址传进来了,但是在函数中我们操作的只是地址,换言之,这还是一种值传递,传递的是指针变量的值。可以参考一下我的另一篇文章C语言参数传递的方式-----值传递与地址传递

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值