c语言常见的几种指针用法
来源:互联网 发布:黑暗之魂剧情分析知乎 编辑:程序博客网 时间:2024/06/05 17:32
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语言中只能用来指向结构体。
综上所述,指针的基本用法就是这几种,还有些用法不常见的小编在此就一一例举了,有兴趣的话可以去翻阅相关的资料。
阅读全文
2 0
- c语言常见的几种指针用法
- C语言双指针的常见用法
- C语言const几种常见用法
- C语言中指针的几种用法
- C语言函数指针的几种用法
- C语言中指针的几种用法
- C语言函数指针的几种用法【转】+gyy修改
- c语言指针的用法
- c语言指针的用法
- C 语言指针的用法
- C语言:指针的用法
- 几种常见排序算法的c语言实现
- 几种常见排序算法的C语言实现
- 几种常见的排序方法(C语言实现)
- 几种常见排序算法的c语言实现
- 几种常见排序算法的c语言实现
- C语言几种常见数据类型的范围
- C语言几种指针的声明方式
- 数论——素数筛法
- kotlin for android 集成&&简单使用
- SQL中char、varchar、text区别
- 求LCA的几种方法
- Android动态加载Jar包并实现Native方法
- c语言常见的几种指针用法
- Shell 显示所在项目当前git分支及状态
- JavaScript 生成器函数function* () {}
- C语言sscanf函数的总结
- JZOJ 3927. 【NOIP2014模拟11.6】可见点数
- 用PDF编辑软件简PDF文档进行上下标简不简单?
- 环境变量的配置--java开发环境
- 【Android资源管理和打包】深入理解Gradle
- 阿里云四轮技术面回顾(四面跪归)