c语言常见的几种指针用法

 1、指针指向变量:

下面有这样一个代码块:

#include <stdio.h>
void test(int x,int y)
{
	int tmp;
	tmp=x;
	x=y;
	y=tmp;
}
int main()
{
	int a=10;
	int b=15;
	test(a,b);
	printf("a=%d,b=%d\n",a,b);
	return 0;
}

最后输出的结果还是a=10,b=15。因为在函数调用时,实参和形参之间只是值传递。但我们使用指针结果就不一样了,如:

#include <stdio.h>
void test(int *x,int *y)
{
	int tmp;
	tmp = *x;
	*x = *y;
	*y = tmp;
}
int main()
{
	int a = 10;
	int b = 15;
	test(&a,&b);
	printf("a=%d,b=%d\n",a,b);
	return 0;
}

输出结果a=15,b=10。变量a和b的值发生了交换。这是因为我们利用指针访问变量的存储单元,间接修改变量的值。
2、指针指向数组:

定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:

#include <stdio.h>
int main()
{
	int array[5] = {1,2,3,4,5};
	int i;
	int *p = array;
	for(i = 0; i < 5; i++)
	{
		printf("array[%d]=%d\n",i , *(p+i));
	}
	return 0;
}

 3、指针指向字符串:

我们都知道用数组存储字符串,如char name[10]="jack",上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name="jack",指针变量指向字符串的首个字符并可以依次访问字符串的各个字符。
4、指针指向函数:

我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:

#include <stdio.h>
int sum(int x,int y)
{
	return x+y;
}
int main()
{
	int a = 5;
	int b = 6;
	int (*p)(int,int);
	p = sum;
	int result = (*p)(a,b);
	printf("The result is %d\n",result);
	return 0;
}

不难发现上面代码块里语句(*p)(a,b)可以用p(a,b)来代替,因为p和sum就是一样的,只是用前者可能更容易理解一点。而我们要知道怎样定义一个指针指向函数, int (*p)(int,int)这是固定写法,前面的int是指针将来指向的函数的返回值的类型,如果没有函数返回值,那就是void,后面括号里的两个int 当然就是指针将指向的函数的形参。指针指向函数用起来确实有点抽象,要想熟练运用的话就多去做一些这方面的练习吧!
5、指针指向结构体:

我们首先首先定义一个结构类型,

struct student
{
     char *name;
      int  ages;
};
再根据类型定义结构体变量 struct student stu={"Rose",15}; 定义一个指针指向结构体类型,struct student *p;把结构体变量stu的地址赋给指针变量p,p=&stu;我们可以有3种方式来访问结构体中的属性ages:

stu.ages=15;

(*p).ages=15;

p->ages=15;

不过第三种方式在C语言中只能用来指向结构体。

 综上所述,指针的基本用法就是这几种,还有些用法不常见的小编在此就一一例举了,有兴趣的话可以去翻阅相关的资料。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值