问答文章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语言中只能用来指向结构体。
综上所述,指针的基本用法就是这几种,还有些用法不常见的在此就一一例举了,有兴趣的话可以去翻阅相关的资料。
c语言指针知识点总结

1)指针一定要初始化,否则容易产生野指针(后面会详细说明);2)指针只保存同类型变量的地址,不同类型指针也不要相互赋值;3)只有当两个指针指向同一个数组中的元素时,才能进行指针间的运算和比较操作;4)指针只能进行减法运算,结果为同一个数组中所指元素的下标差值。(2)指针的本质分析 ①指针...

C语言指针怎么用?

在c语言中.指针被用来表示内存单元的地址,如果把这个地址用一个变量来保存,则 这种变量就称为指针变量。指针变量也分别有不同的类型,用来保存不同类型变量的地址。严格地说.指针与指针变量是不同的,为了叙述方便,常常把指针变量就称为指针。内存是计算机用于存储数据的存储器,以字节作为存储单元....

可以介绍一下c语言里面的指针怎么运用吗?

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如: (1)int*ptr;//指针所指向的类型是int (2)char*ptr;//指针所指向的的类型是char ...

C语言指针的用法是什么?

运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时,指针也...

c语言指针知识点总结

1. 指针的初始化和类型匹配 - 指针在使用前必须被初始化,以避免野指针的出现。- 指针只能存储同类型变量的地址,不同类型的指针之间不应进行赋值操作。2. 指针的运算和比较 - 只有当两个指针指向同一个数组中的元素时,指针之间的运算和比较才是有意义的。- 指针只能进行减法运算,其结果是两个...

急!!叙述对C语言指针的认识,在使用指针时应该注意什么问题? 谢谢大神...

int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.int p(int); //从P...

C语言的指针是什么

先声明几个指针放着做例子:例一:(1)int *ptr;(2)char *ptr;(3)int **ptr;(4)int (*ptr)[3];(5)int *(*ptr)[4];如果看不懂后几个例子的话,请参阅我前段时间贴出的文章 &lt; &lt;如何理解c和c++的复杂类型声明&gt;&gt;。1。 指针的类型。从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的...

c语言关于指针问题 int x=2,y=5,*px=&amp;x,*py=&amp;y;这个语句*px=&amp;x正确么...

如果不是声明,而是语句:int x=2, *px; // 声明 变量 x, 初始化 x=2, 声明 px 是 指针 变量 px=&amp;x; // 这里 是语句,这个语句 不正确。语句里要写:px = &amp;x; // 把 x 的地址 赋给 px, 也就是 让 px 指向 x.接下来要是有语句:px = 5; // 这个语句正确, ...

c语言中指针的优先级是如何规定的?

1.指针所指地址自增 p++等同于*(p++)++p等同于*(++p)2.指针所指地址中数据自增 ++(*p)等同于++*p (*p)++ (左自增:先求变量变化,再输出)形式:++p、*++p、++*p、++(*p)、(右自增:先输出变量当前所指值,再求变量的变化)形式:p++、*p++、(*p)++、*(p++)哪个是变量:...

C语言指针什么时候要带*什么时候不带*?

1.声明的时候需要用*来表示声明的对象是一个指针。如:int* p;2.使用的指针的值的时候。如:printf("p = %d",*p);3.给指针赋值的时候。*p = 5;不带*的情况:1.使用指针的时候。如:int a = 0; p = &amp;a;(p是int*)2.表示字符串首地址的时候不用*。如:char* ch = "hello"; ...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
牛年宝宝起名字的避讳 我的农场怎么没有微博精灵 微博图片无法显示,前几天还好好的,后来又一部分不能显示,现在全部不行... 为什么我的新浪微博突然间消失了,前几天都还在用的,今天就登陆不了,去... 我的农场里为什么没有微博精灵 U型单管液体压力计电器原理 04年的GL83.0,二手,最近发现启动后左前保险杠下漏防冻液,车子只要一... u型管压力计原理是什么 别克gl83.0喷油嘴在哪 别克gl83.0曲轴位置传感器在哪里? 快手手机客户端怎么打开 手机APP快手怎么用 怎么用C语言打开一个程序? 快手常看的人为什么没有了? 如何使用C语言编写简单小游戏? 使用c语言编写程序 C语言有什么实际应用? 华为手机怎么把微信设置到隐私空间? reamQ2这是什么牌手机? 滚筒洗衣机排水口堵塞下面的过滤网怎么打开? 除螨仪的过滤网需要经常换吗? beko洗衣机不开始工作是什么原因 求BEKO(倍科) WCE15085P滚筒洗衣机使用方法 如何使用 如何操作_问... 产后吃什么可以更快地恢复子宫,排出恶露? 你好,请问倍科洗衣机右下角哪个排水泵过滤器怎么打得开? 空间打开了。为什么不显示QQ农场一些相关的图标呢? 冰箱过滤器复位指示灯是什么意思beko QQ农场怎么亮图标 请教制药用压缩空气中残油含量的准确检测方法? QQ农场果实成熟的QQ提醒怎么取消啊 如何用手机在快手直播天天象棋? 使用C语言编辑 合作合同到期还有法律效益吗? 合同到期了可以直接走吗? 协议到期是否就是自然终止? 合同到期续签流程是怎么规定的 合同到期了 怎么办? 我和男友分手时他写了一份补偿协议,现在协议到期了,我要求他还钱,请问这份协议有效吗?_百度问一问 协议到期后继续给对方提供了服务,但对方不支付协议期后我方提供服务的相关费用,可以起诉对方吗? 实习协议要到期了怎么和公司说续约 合同到期后,双方继续合作构成事实合同吗? 是502胶粘性好还是101胶水粘性大? 质粒载体的种类有哪些啊? 常用的基因工程载体有哪些?各有什么优缺点? “网红101号汽油”能增强动力吗? 网站打不开101 求气相色谱法测水中苯系物的操作步骤 质粒的载体构建 科学家在培养转基因植物时,常用什么中的质粒作为载体? 载体构建的人工构建
  • 焦点

最新推荐

猜你喜欢

热门推荐