问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何正确地使用C语言的指针

发布网友 发布时间:2022-04-23 09:15

我来回答

1个回答

热心网友 时间:2022-05-02 10:04

指针是C语言中的精髓,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。
1、指针指向变量:
下面有这样一个代码块:
int main()
{int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);}
void test(int x,int y)
{int tmp;tmp=x;x=y;y=tmp;}
最后输出的结果还是a=10,b=15。因为在函数调用时,实参和形参之间只是值传递。但我们使用指针结果就不一样了,如:

int main()
{int a=10;int b=15;test(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;}
void test(int * x,int *y)
{int tmp;tmp=*x;*x=*y;*y=tmp;}
输出结果a=15,b=10。变量a和b的值发生了交换。这是因为我们利用指针访问变量的存储单元,间接修改变量的值。
2、指针指向数组:
定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:
int main()
{int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i<5;i++){printf("array[%d]=%d\n",i,*(p+i));}return 0;}
3、指针指向字符串:
我们都知道用数组存储字符串,如char name[20]="jack",上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name="jack",指针变量指向字符串的首个字符并可以依次访问字符串的各个字符。
4,指针指向函数:
我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:
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语言中只能用来指向结构体。
综上所述,指针的基本用法就是这几种,还有些用法不常见的在此就一一例举了,有兴趣的话可以去翻阅相关的资料。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 快手手机客户端怎么打开 手机APP快手怎么用 怎么用C语言打开一个程序? 快手常看的人为什么没有了? 如何使用C语言编写简单小游戏? 使用c语言编写程序 C语言有什么实际应用? 华为手机怎么把微信设置到隐私空间? reamQ2这是什么牌手机? 滚筒洗衣机排水口堵塞下面的过滤网怎么打开? 除螨仪的过滤网需要经常换吗? beko洗衣机不开始工作是什么原因 求BEKO(倍科) WCE15085P滚筒洗衣机使用方法 如何使用 如何操作_问... 产后吃什么可以更快地恢复子宫,排出恶露? 你好,请问倍科洗衣机右下角哪个排水泵过滤器怎么打得开? 空间打开了。为什么不显示QQ农场一些相关的图标呢? 冰箱过滤器复位指示灯是什么意思beko QQ农场怎么亮图标 请教制药用压缩空气中残油含量的准确检测方法? QQ农场果实成熟的QQ提醒怎么取消啊 如何用手机在快手直播天天象棋? 使用C语言编辑 合作合同到期还有法律效益吗? 合同到期了可以直接走吗? 协议到期是否就是自然终止? 合同到期续签流程是怎么规定的 合同到期了 怎么办? 我和男友分手时他写了一份补偿协议,现在协议到期了,我要求他还钱,请问这份协议有效吗?_百度问一问 协议到期后继续给对方提供了服务,但对方不支付协议期后我方提供服务的相关费用,可以起诉对方吗? 实习协议要到期了怎么和公司说续约 合同到期后,双方继续合作构成事实合同吗? 是502胶粘性好还是101胶水粘性大? 质粒载体的种类有哪些啊? 常用的基因工程载体有哪些?各有什么优缺点? “网红101号汽油”能增强动力吗? 网站打不开101 求气相色谱法测水中苯系物的操作步骤 质粒的载体构建 科学家在培养转基因植物时,常用什么中的质粒作为载体? 载体构建的人工构建