您的位置:

电脑c语言指针,指针用法c语言

本文目录一览:

C语言中指针的作用是什么?

指针指向地址,指针的特性就是在地址不变的情况下,可以很方便的修改所指向的内容\x0d\x0a\x0d\x0a最重要的应用有两个,一是函数参数,二是函数指针\x0d\x0a函数参数:函数返回值只有一个,如果想回传多个参数,则必须使用指针\x0d\x0a函数指针:典型应用就是回调函数(callback)

c语言指针有什么用

1、指针的使用使得不同区域的代码可以轻易的共享内存数据;2、C语言中一些复杂的数据结构往往需要使用指针来构建;3、C语言是传值调用,而有些操作传值调用是无法完成的,但是这种操作可以由指针来完成,而且并不违背传值调用。

怎么理解C语言里的指针?

指针就是内存的地址。

内存懂吧,就是放数据的地方,数据就像一个人的家,懂吧,一栋楼里,肯定住了不止一家人吧,那么确定每家的地址,就需要几楼几零几这样设置地址吧。内存也是一样的,内存是按一个字节的大小来安排地址的。

比如int a;我们申请了一个int型,整形的变量,int是四个字节的数据类型,所以变量a在内存上会有一个地址,地址是按第一个数字为准的。假设内存上没有任何数据,都是空的,那么内存就会按顺序来放地址,假设内存的第一个地址是0,以此类推,那么当我们int a变量的时候,内存就会把0-3地址的空间分配给变量a,因为a占四个单元内存,那么怎么确定变量a的地址呢?计算机是按这个内存地址上的最开始那个算的,即变量a的地址是0。

当我们在声明了int a变量之后,再声明一个char b变量。如下:

int a;

char b;

这个时候,int a先被声明了,假设内存是空的,那么变量a就会被安排0-3的地址。第二个声明char b;就会接在变量a之后,因为char是一个字节的数据,所以内存只会分配一个4号内存给变量b,变量b的地址就是4。以此类推,其他类型是一样的。

指针就是用来存放内存地址的地方。指针变量一般也会单独存放。

比如:

int a; //内存分配编号为0-3的内存空间给变量a;变量a的地址就是最开头的那个编号即变量a的地址是0;

char b; //内存紧接着分配编号为4的内存空间给变量b,因为char是一个字节的,所以变量b的地址唯一,就是4。

随后,我们申请指针。

int * p;

char * t;

我们申请了两个指针, *是指针的标志,有*的变量是指针,没有*的是一般变量,*只是用来区别变量是int型数据还是指针。

当变量是指针的时候,意味着这个变量只能存放内存地址,而不能存放任何自然数。

即指针p,只能用p=a; 变量a在C语言中,单用的时候,使用变量a里面存放的值,而不是他的地址,比如 我们再声明一个变量 int g; g=a;这个例子里,我们声明了一个int型变量g,并用g=a来初始化g,g=a的意思是,用a里存放的数,即读取出a里面存的数,然后把这个数给g,并不是把a的地址给g。所以C语言里规定了符号为取地址操作符,p=a;的意思就是取出a的地址,给p,这个时候是可以的,因为p是指针,并且p指针指向的类型是int。

在C语言中,给指针赋地址,要检查变量的类型的,比如int *p;这个指针p,p前面的*表示他是指针,说明他只能存放地址,*号前面的类型说明符,进一步说明,p这个指针只能存int型变量的地址,即如果p=b;是不会成立的,并且会报错,因为p是一个存放int型变量的指针,而变量b是一个char型变量,在C语言里,指针和对应的变量的类型要一致。不能够混用。

不能混用的原因在于,到时候解引用的时候会出错,即如果 p=b,成立的话,那么到时候使用 a=*p;的时候会出现严重错误,因为p=b,是把char型变量的地址给int型指针,当我们在使用解引用符号*的时候,就会错误,a=*p;的意思是,用p里存放的地址,找到内存上的数据,并且给变量a,编译器会检查,得知p是int型变量指针,所以需要按照这个地址取出的数据是四个字节的数据,所以程序会把b的地址4按照int型的数据变量地址来使用,会调取内存上编号为4,5,6,7号位的数据,然而编号为4的内存上放的是char 型变量b的数据,5,6,7号内存上,根本没有数据,从而出错。所以C语言严格要求,指针的类型和变量类型要一致,即int *的指针只能存放int型变量的地址,不可混用。

最后一个疑问点在于*符号,在C语言里是复用的,即有三种使用方法,这里给你区别一样,要不然你会有疑问,* 这个符号,在C语言有三种意思,一种是乘法,即 a=5*3里,这个时候这个符号*是乘法的意思,认出他很简单,因为乘法必须要有乘数,被乘数,即符号*左右两边都要有实数或者变量,即使是c=a*b;的表达也不会错,a,b是变量的话,符号*是乘号用法。

第二种用法就是我们看到的 int *p;这里面符号*是指针的标志,只是用来说明p是一个指针,假设一个int p,那请问怎么区别p是指针还是变量,所以就是通过添加符号*来区别变量和指针的,而且指针和变量一样,都需要int,char,double等类型说明,所以只有在声明变量的时候,才使用。

第三中用法就是和符号的操作相反的操作,符号在C语言里,只有一个用法,就是表明,这个运算符是取出后面的地址,即a,就是取出变量a的地址,即指针,符号左边没有任何变量,只有右边有变量,而符号*则是相反操作,意思是取出符号*右边的指针里的地址,并取出这个地址里存放的数,所以*P,就是取出指针p里的地址,然后取出这个地址里存放的数。符号*也是右边有变量,而左边没有任何变量的操作,他们都是单操作符。

第二种和第三种用法要怎么区别,就是第三种一定是a=*p这样使用的,符号*的左边一定没有任何类型说明符,而如果是第二种用法,那么符号*的左边一定有类型说明符,即第二种一定是int *p; 即 类型说明符 + * +变量名的形式,而且只用在声明指针变量的时候。

C语言中指针是什么

我们都知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类

数据类型,int指针类型,double指针类型,char指针类型等等。

通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = 'a'。

我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。

因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。