C语言中的指针到底有什么用
简单地说指针就是指向变量和对象的地址。
指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率。
以上还只是指针的初步应用,随着你在C语言学习上的逐步深入,你会发现更多的用途的。
指针,说白了就是储存数据内存段的地址。打个比方说,你家的门牌号是306,那么你家中回来一些客人,这些客人就相当是一些变量,而门牌号就说明了地址,如果张三在你家,另一个人要找到他,那么此时我们只需要告诉那人306,就相当于你访问一个变量时,曲线救国,不直接访问变量的值,而去访问变量的地址,这会带来很多方便。由于c语言是一种比较低级的语言,所以包括了许多对硬件操作的部分,直接对内存进行操作会带来很多方便。
所有变量值保存在内存中,而每个内存都有一个地址,所谓地址就是一个整数编号,如同门牌号码用于定位(专业术语叫寻址),一个地址对应一个字节(8bit)的内存单元。如今的编译器,一个整数int类型的值占用32位bit,也就是4字节,编译器将第一个字节的编号定义为该整数的地址,由于保存地址的变量就像一个箭头指向某地址,而称为指针变量。
int a =10; //定义一个整数变量a,对其赋值10
int *p =&a;//定义一个指针变量p,对其赋值a的内存地址,&符号意思为引用跟随其后的变量地址。
cout <<a<<endl; //输出 a的值:10
cout << p << endl ;// 输出p的值:XXXXX 其实为a的地址,该地址由编译器和运行时确定。
cout << *p <<endl; //输出p指向的地址中的值:10,也就是a的值,*星号放在变量前面意思就是取该变量中的地址所指内存中的值。
读取过程为:p的值(a的地址)->寻址->取值
由于指针是一个变量的首个字节的地址,所以要告诉编译器被指地址包含连续多少个字节,因此指针也有类型。比如上面例子中声明了p指针是个整数指针,这样编译器知道p指向一个4字节的内存块。
你可以将指针变量看做一般的整数变量来理解,用来保存一个整数(地址是个整数),只是,该整数代表着某地址,在这里是a的地址。
在C/C++中很灵活,但是也很危险,也很难学,如果指针指向错误的地址会引起程序崩溃,因此在C#中已经被微软封装了,但内部还是有指针的。
如果有必要,C#中也可以使用指针,使用非安全代码,在项目生成选项卡中勾选“允许非安全代码”,然后就可以使用指针了,不过不建议这么做。
unsafe
{
int a = 10;
int* p=&a;
}
指针起的作用是标识一块内存。电脑内存上的每一个字节都具有一个编号,称为地址(可以简单理解为指针),任何读写内存的指令都必须携带地址信息,否则电脑不知道读写那块内存。不管你的程序是用什么语言写的,要运行数据和代码必须驻留内存,CPU要执行指令必须有一个“指针”(程序计数器)指向内存的代码块,如果某个指令要操作内存数据,该指令必须携带额外的地址信息。
C语言的指针让程序员具备直接操作和管理内存的能力,这个能力也是C语言适合编写底层软件的原因之一。现在拿得出手的操作系统都是用C语言(有时也用C++)和汇编语言编写的。在底层软件领域C语言是占统治地位的。
C语言对内存的操作都是通过指针来实现的,虽然C语言可以通过变量名访问内存,但是编译过后变量名被转换为地址。
其他语言虽然没有指针或者地址概念,但是访问内存是需要地址的,所以与地址相关的底层操作由该语言的运行时库承担了,对程序员来说,地址就“不存在了”。
指针其实是某些处理的鼻祖 c#或者java里面没有指针 但是有引用 其实引用就是指针的一种封装形式 你觉得有了c这种高级语言 汇编语言甚至机器语言就是否没用了呢? 指针非常灵活强大 但是用起来确实非常容易出错 c语言毕竟不支持引用或者其他的变相指针形式 要用c的话一切就要用纯指针实现(纯指针可以节省封装所用的资源 加快处理速度 提高程序效率) 就像嵌入式的内核或者操作系统内核要用c 不用java一样 有的时候稳定性和可靠性是第一考虑 但是有的时候 高效才是第一考虑 而稳定性需要靠程序猿手动实现(而不依赖程序的某些try catch 这种东西)
C#也有指针,只是它是面向对象的,有着大量的封装,在C#里指针(*)变成了引用(ref)、(a->b)变成了(a.b)。指针就是地址,把一个内存单元画成正方体(画在纸上能可见3个面),上面分别标注: 变量名、地址、值。这就形象多了。
指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它。
什么是指针数组
在C语言语言中,数组元素全为指针的数组称为指针数组。指针数组可以作为函数的参量使用,使用方式与普通数组类似。数组指针是指向数组首元素的地址的指针,其本质为指针,指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动。指针数组是数组元素为指针的数组,其本质为数组。指针数组常适用于...
C语言中指针*p=*q与p=q有什么区别
答:*p=*q与p=q的本质区别在于:*p=*q操作的是变量存储的数值,p=q操作的是指针变量本身 C语言中,指针操作主要有以下三种情况:p 是指针变量p指向的变量a的存储内容,*p = 5;p 是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;&p ...
什么是字符指针
由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。
C语言中的指针结构体 在VB全都没有吧?
其实,VB也是用C++语言写的,图形模式跟文本模式有很大差别,但编程语言都是一样的,它们只是在调用函数,访问CPU而己,而不论这些函数是操作系统函数库,还是BIOS函数(就是中断),还是其它函数。至于Visual C++ 中的MFC,其实也是对Win32 API函数的封装,使之更容易使用。如果你想学好编程,别对五花...
C语言中的空指针是什么意思?
空指针是就是一个被赋值为0的指针。对于空指针值,一般的文档中倾向于用 NULL 表示,而没有直接说成 0。但是我们应该清楚:对于指针类型来说,返回 NULL 和 返回 0 是完全等价的,因为 NULL 和 0 都表示 null pointer(空指针)。
为什么很多人觉得C语言只要学会了指针基本上差不多掌握这门语言?
前者可以设计为小猫计算两个数,也可以是小猫2...,而后者就是计算,而且可以具体到是哪两个数相加。)面向对象对于现在的编程语言还是很重要的。个人觉得,指针与面向对象密切相关,导致在C语言中指针就变得尤其重要,像我后面学习的Python、java就没有指针一说,但出现了很多类。相对C语言来说,多出...
c语言中函数名就是一个指针吗
是的。函数指针就是函数的指针,它是一个指针,指向一个函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。例:A) char * (*fun1)(char * p1,char * p2);B) char * *fun2(char * p1,char * p2);表达式相比,唯一不同的就是函数的返回值类型为char**,是个...
C语言中指向指针的指针是什么意思
它只能存放别的变量的地址 变量时在内存中是有地址的 你要明确两概念:变量值和变量地址 变量值:是变量本身的内容 变量地址:是该变量在内存中的位置编号 通俗来讲就是说这个变量fp只能接受一个指针变量的地址所以你看第8行在p前面加了一个’&‘取地址符号 也就是说把p这个变量的地址给了fp了fp...
C语言中指针存在的意义
没有指针的话C语言就没有存在的价值了 三言两语说不清,给你个知乎链接:网页链接
C语言的行指针与元素指针有什么区别?
先举个例子吧,先定义一个二维数组int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}} 数组名a就是一个行指针,a[0]就是一个列指针;就拿这个例子说吧,a和a[0]虽然地址相同,可是指针指向类型却不同,对指针进行+1运算,显然得到的结果是不同的,因此a(行指针)+1中的"1”...
壤昂欣诺: 所谓指针就是一个地址,它必须初始化才能使用,所谓初始化就是要指向一个目标.它的作用是,比如你在main函数里定义了一个const int a = 100,如果你想改变a的值,那么一般的办法就行不通了,这个时候就能用到指针了,你定义一个指针指向a,然后通过指针对a的空间进行操作达到改变a的目的.当然一般人是不会这样干的,这里只是为了说明指针的一个作用而已,指针能帮助你完成一些复杂的计算,用处很大.
广汉市17730721450: C语言的指针有什么实际作用? - ?
壤昂欣诺: 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它.简单地说指针就是指向变量和对象的地址.指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递.还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率.以上还只是指针的初步应用,随着你在C++学习上的逐步深入,你会发现更多的用途的.
广汉市17730721450: 在C语言中什么是指针?指针是干什么用的?,有什么意义? - ?
壤昂欣诺: 写简单的程序的话不用指针也行了吧. 比如, int a = 2; int* p = &a; *p = 3; 这里a是一个地址(编译后), 为了读写这个地址单元里的东西,可以用p,也可以用一般变量a. 对于指针的便利,我现在能想到的,可能是: 函数A调用函数B时,把一...
广汉市17730721450: C语言的指针有何用? - ?
壤昂欣诺: 指针可以说是C的精髓.只是你现在上课没有体会而已.从事Linux系统开发的人,几乎天天和指针打交道.Linux kernel的架构几乎都是靠指针来做的.广泛的应用链表和各种数据结构中.像数组指针和函数指针可以使一个结构体当成一个对象来使用.好好学指针.以后工作很有用的.如果打算从事程序这个行业的话.也欢迎找我交流C语言方面的问题.
广汉市17730721450: C语言中指针在编程中有什么作用? - ?
壤昂欣诺: 指针,太有用了,也最难管理的,好处多的是,比如,函数传递,参数是结构时,传指针可以提高性能
广汉市17730721450: C语言的指针有什么用? - ?
壤昂欣诺: c提供了两种访问变量的方法.通过变量名和通过地址.用指针就是通过地址来引用变量的.但地址也必须存储在内存中.所以就用指针变量 来存储变量的地址的.
广汉市17730721450: C语言里的指针是什么意思,起什么作用 - ?
壤昂欣诺: 1:指针是一个地址,指向的是个类型: 我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使...
广汉市17730721450: C语言的指针有什么用?编程不一定要用指针吧?请高手指点一下. - ?
壤昂欣诺: 指针是值得重视的.编程不一定用指针,可以用数组.但是,对编程来说,一般指针就占用4个字节,保存某个变量、结构体甚至是函数的地址.程序运行,直接按地址跳转是非常快的,效率很高.比如:多个函数用到一个很大的数组,如果用这个数组的地址来传递信息,一是不用把整个数组传到其他地方(复制,浪费空间和时间),二是效率很高.在追求效率和空间的时候,就必须得考虑指针.如:嵌入式系统或者软件 总之,不要害怕指针,指针有指针的规律,刚开始学习,比较难懂,没关系,慢慢就熟悉了.编程就像数学,越练习,越能写出好的代码.希望对你有帮助.
广汉市17730721450: C语言指针有什么用?
壤昂欣诺: 指针,说白了就是储存数据内存段的地址.打个比方说,你家的门牌号是306,那么你家中回来一些客人,这些客人就相当是一些变量,而门牌号就说明了地址,如果张三在你家,另一个人要找到他,那么此时我们只需要告诉那人306,就相当于你访问一个变量时,曲线救国,不直接访问变量的值,而去访问变量的地址,这会带来很多方便.由于c语言是一种比较低级的语言,所以包括了许多对硬件操作的部分,直接对内存进行操作会带来很多方便.
广汉市17730721450: c语言中函数指针是什么 有什么用 举个实例 - ?
壤昂欣诺: 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数.函数指针有两个用途:调用函数和做函数的参数.函数指针的...