c语言指针变量,C语言指针变量怎么转化为普通类型变量?
c语言指针变量,C语言指针变量怎么转化为普通类型变量?详细介绍
本文目录一览: C语言中“指针”和“指针变量”的区别是什么??
区别在于:
1、“指针”是概念,“指针变量”是具体实现。指针也是一个变量,所以需要我们进行定义,而对于指针的定义,与一般变量一样。
2、一个变量的(内存)地址称为该变量的“指针”,通过指针能找到以它为地址的内存单元。而指针变量是用来存放另一个变量的地址的(即指针)。
3、指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。
扩展资料
指针与C语言关系:
大家都认为,c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是c语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。
指针变量概括:
1、存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
2、如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。
参考资料来源:百度百科--指针 百度百科--指针变量
用例子来看一下。
int a=3;
int *p;
p=&a;
现在来看一下。a=3这个式子先解释一下
等式右边是常量,左边是变量。
同理的
p=&a,左边的是指针变量,右边的是指针
指针的基本概念:为了区别内存的不同位置,内存被分成字节,内存的全部字节顺序地赋予一个称为地址的编号。程序中的变量将在内存中占据一定的内存字节,在这些字节中存储的数据信息称为变量的内容。
一个变量占用连续的若干个内存字节时,最前面的一个字节的地址就作为该变量的地址。指针就是内存地址,是变量的地址,或函数的入口地址。变量的地址在程序执行时,起着非常重要的作用。当计算机在计算含有变量的表达式时,计算机按变量的地址取出其内容,并按变量的地址将计算结果存入到变量占据的内存中。
如代码: int x=l; x=x+2; 其中语句“x=x+2;”中的第一个x涉及到变量x占据的内存,第二个 x是引用变量 x的内容。该语句的意义是“取X的内容,完成加上2的计算,并将计算结果存入变量X占据的内存中。”
指针变量和它所指向的变量:在C语言中,地址也作为一种值,能被存储、比较、赋值,并称地址数据为指针类型,而称存储地址值的变量为指针变量,简称指针。C程序可用运算符&取变量的地址,如表达式&x的值就是变量X的地址。程序除能按名引用变量外,也可利用变量的地址引用变量。按变量名引用变量称为直接引用,而将变量A的地址存于另一变量B中,借助于变量B引用变量A称为对A的间接引用。
定义指针变量的一般形式为: 类型 * 指针变量名; 或 类型 * 指针变量名=初值表达式; 其中,指针变量名是标识符,指针变量名之前的符号“*”,表示该变量是指针类型的。而最前面的“类型”,表示该指针变量能指向变量或函数的类型。初值表达式是一个地址表达式,如表达式中有某变量的地址表达式,则这个变量应是前面已定义的。
在C语言中,当定义局部指针变量时,如未给它指定初值,则其值是不确定的。程序在使用它们时,应首先给它们赋值。误用其值不确定的指针变量间接引用其它变量,会引起意想不到的错误。为明确表示指针变量不指向任何变量,在C语言中用0值表示这种情况,记为NULL。
如 ip= NULL; 也称指针值为0的指针变量为空指针。对于静态的指针变量,如在定义时未给它指定初值,系统自动给它指定初值0。
指针变量取程序对象的(开始)地址值,不能将一个整型量或任何其它非地址值赋给一个指针变量。另外,指针变量对所指向的对象也有类型限制,不能将一个不能指向的对象的地址赋给指针变量。
如有以下定义: int i=100,j,*ip,*intpt; float f,*fp; 以下代码如注释所叙。 iP=&i;/*使ip指向i*/ intpt=ip;/*使intpt指向ip所指变量*/ fp= &f;/*使fp指向正*/ ip=NULL;/*使 ip不再指向任何变量*/
拓展资料:在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。
意思是通过它能找到以它为地址的内存单元。 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。
作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
指针是程序设计语言的一个重要概念。指针在C程序中有以下多方面的作用:
利用指针能间接引用它所指的对象。
利用各种类型的指针形式参数,能使函数增加描述能力。
指针与数组结合,使引用数组元素的形式更加多样、访问数组元素的手段更加灵活。
指针能用来描述数据和数据之间的关系,以便构造复杂的数据结构。当一个数据A要关联另一个数据B时,在数据A中增加一个指向数据B的指针就可实现数据A关联数据B。结合系统提供的动态分配存储设施,又能构造出各种动态数据结构。
比较严格的说法是这样的:
系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5;,存放变量i的内存单元的编号(地址)&i被称为指针。
“指针变量”则是存放前述“地址值”的变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址”的变量(因为一个变量通常要占用连续的多个字节空间)。比如在int i=5;后有一句int *p=&i;,就把i的指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针的变量。
有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针是指针变量的简称”,如对int *p=&i;的解释是:声明一个int *型指针p,并用变量i的地址初始化;而严格说应该是声明一个int *型指针变量p才对。所以有时看书要根据上下文理解实质,而不能过于拘泥于文字表述。
指针概念是构成C/C++的重要元素之一,是变量的一种类型,存放的是指定类型数据的地址,而同类型变量存放的是数据。
指针变量,顾名思义,就是一个变量,其值是可变的,与整形变量、浮点变量等等的命名规则完全相同。
“指针”是概念,“指针变量”是具体实现。
指针变量,就是一个存放地址的变量,通常定义整形,实型等变量后,系统给变量分配一定的内存单,用来存放数据的,而定义一个指针变量给它分配的空间是用来存放地址的。且只能存放地址。
1、概念不同
“指针”是概念,“指针变量”是具体实现,指针也是一个变量,所以需要进行定义,而对于指针的定义,与一般变量一样。
2、 存放地址不同
一个变量的(内存)地址称为该变量的“指针”,通过指针能找到以它为地址的内存单元。而指针变量是用来存放另一个变量的地址的(即指针)。
扩展资料:指针和指针变量的关系
1、指针就是地址,地址就是指针。
2、地址就是内存单元的编号。
3、指针变量就是存放内存地址的变量。
4、指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。
注:
指针里存的是100. 指针:地址 - 具体。
指针里存的是地址,指针:指针变量 -可变。
指针的好处:
1、直接访问硬件
2、快速传递数据(指针表示地址)
3、返回一个以上的值返回一个(数组或者结构体的指针)
4、表示复杂的数据结构(结构体)
5、方便处理字符串
6、指针有助于理解面向对象
C语言指针基本概念及其指针变量的定义是什么
在C语言里,指针是一组内存的头地址,可以存一个数,一个字符,也可以是一个数组.
变量,就是像定义一个整型变量一样的,定义的是一个指针型变量.
指针是一个其数值为地址的变量(或更一般地说是一个数据对象)。
存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
指针是常见间接访问方式.指针就像一个快捷方式,它指向内存的一个地址,可以通过指针就可以间接的访问到数据。对于计算机,访问内存的方式有两种,直接访问和间接访问。直接访问通过就是通过变量名称去访问。指针概念是构成C/C++的重要元素之一,是变量的一种类型,存放的是指定类型数据的地址,而同类型变量存放的是数据。
指针变量:就是一个变量,其值是可变的,与整形变量、浮点变量等等的命名规则完全相同。 “指针”是概念,“指针变量”是具体实现。指针类型说明,即定义变量为一个指针变量; 指针变量名; 变量值(指针)所指向的变量的数据类型。
扩展资料:
与其他高级编程语言相比,C 语言可以更高效地对计算机硬件进行操作,而计算机硬件的操作指令,在很大程度上依赖于地址。指针提供了对地址操作的一种方法,因此,使用指针可使得 C 语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作数组。在一定意义上可以说,指针是 C 语言的精髓。
c语言中,什么是变量指针,什么是指针变量,并举例说明
变量指针:指向的数据为变量的指针,如char *p。与此相对的是常量指针,如const char* p。
指针变量:类型为指针的变量,如char *p。与此相对的是指针常量,如char* const p。
C语言指针变量定义?
根据你的定义,使用LinkList定义的变量是指针变量,而加上*即LinkList *C表示的是指向指针的指针,表示二级指针变量。
你的合并函数是一个没有返回值的函数,所以你在函数体内更改C要达到更改实参的效果,你必须传入实参的地址。
如果是一级指针,C接收实参指向的对象地址,如果此时在函数体内对C进行赋值,只是改变了函数体内C的指向,实参还是指向原来的地址。函数内是改变不了实参C本身的指向,只有传入实参C变量本身的地址,那么形参就要定义指向指针的变量来接收实参。
以上是一种方法,另外一种方法就是通过函数返回值,返回新合并的链表的头。那函数类型就可以改为:
LinkList MergeList(LinkList a, LinkList b)。
这可以多练习好好理解一下。
C语言中指针变量是存在哪里的?
指针本身存放地的规则同一般变量,如果是全局或者静态就在堆中,如果是局部变量、参数就放在栈中
放在栈中,和 int b;一样;
int* a;和 int b;
a和b存放在同一块内存中。
在单片机里面, ’指针变量‘ 是存储在 寄存器 里面的。 我用430单片机仿真观察到的。
指针是变量的类型,它也是变量呀,你上面不就是说的变量吗,指针也是普通变量
指针也是变量啊 也分局部变量和全局变量 和普通的变量没什么差别
1、指针变量和普通的变量一样,编译期储存在代码当中,运行期间储存在内存里。c语言的变量值是通过该变量的内存地址寻址得到的,而对于一个已经编译好的程序,变量的地址都是确定的值,不可以更改。这是因为程序在编译时编译器已经通过语法分析把指针变量的地址值计算出来了,所以指针变量实际上不用保存在内存堆栈或数据段中,而是包含在汇编代码里面。
2、指针变量里面就是整型的一个十六进制数,用来表示的就是指向某个变量的地址;
指针是C语言中广泛使用的一种数据类型;
利用指针变量可以表示各种数据结构;
能很方便地使用数组和字符串;
并能象汇编语言一样处理内存地址,从而编出精练而高效的程序;
指针极大地丰富了编程语言的功能。
C语言指针基本概念及其指针变量的定义是什么
我们知道变量在计算机内是占有一块存贮区域的,变量的值就存放在这块区域之中, 在计算机内部, 通过访问或修改这块区域的内容来访问或修改相应的变量。Turbo C语言中, 对于变量的访问形式之一,就是先求出变量的地址,然后再通过地址对它进行访问,这就是这里所要论述的指针及其指针变量。
所谓变量的指针, 实际上指变量的地址。变量的地址虽然在形式上好象类似于整数, 但在概念上不同于以前介绍过的整数, 它属于一种新的数据类型, 即指针类型。Turbo C中,
一般用指针来指明这样一个表达式&x的类型,而用地址作为它的值,也就是说, 若x为一整型变量, 则表达式&x的类型是指向整数的指针,而它的值是变量x的地址。同样, 若double d;则&d的类型是指向以精度数d的指针,而&d的值是双精度变量d的地址。所以,
指针和地址是用来叙述一个对象的两个方面。虽然&x、&d的值分别是整型变量x和双精度变量d的地址, 但&x、&d的类型是不同的, 一个是指向整型变量x的指针, 而另一个则是指向双精度变量d的指针。在习惯上,很多情况下指针和地址这两个术语混用了。
我们可以用下述方法来定义一个指针类型的变量。
int *ip;
首先说明了它是一指针类型的变量,注意在定义中不要漏写符号*,否则它为一般的整型变量了。另外,在定义中的int 表示该指针变量为指向整型数的指针类型的变量, 有时也可称ip为指向整数的指针。ip是一个变量, 它专门存放整型变量的地址。
指针变量的一般定义为:
类型标识符 *标识符;
其中标识符是指针变量的名字, 标识符前加了*号,表示该变量是指针变量, 而最前面的类型标识符表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量, 也就是讲, 我们不能定义一个指针变量, 既能指向一整型变量又能指向双精度变量。
指针变量在定义中允许带初始化项。如:
int i, *ip=&i;
注意, 这里是用&i对ip初始化, 而不是对*ip初始化。和一般变量一样,对于外部或静态指针变量在定义中若不带初始化项, 指针变量被初始化为NULL, 它的值为0。Turbo C中规定, 当指针值为零时, 指针不指向任何有效数据, 有时也称指针为空指针。因此, 当调用一个要返回指针的函数时(以后会讲到), 常使用返回值为NULL来指示函数调用中某些错误情况的发生。
指针是C语言中广泛使用的一种数据类型。
利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。
如:int *p1;表示p1是一个指针变量,它的值是某个整型变量的地址。
语言中,指针是一种类型,被称为“指针类型”。指针类型描述的是一个地址,这个地址指向内存中另外一个对象的位置。简单地说,指针表示的是它所指向对象的地址。
1、比较point,*point,&point三者的区别
对于int * point;
point:是指针变量,其内容是地址量。
*point:是指针变量的目标变量,即指针指向的那个变量,其内容是数据。
&point:是指指针变量本身所占据的存储地址。
2、指针与数组
用指针和数组名在访问内存中的数据时,他们的表现形式是等价的,因为他们都是地址量。
数组名表示整个数组的首地址,可以看作是固定地址的指针,不能被赋值。
数组名无须赋初值,而指针在使用前必须赋初值。
3、字符指针和字符串
字符串是一个字符数组,字符串以‘\0’结束。printf函数的%s格式输出字符时,是从给定的地址开始,到遇上第一个‘\0’字符时结束。
对字符指针初始化,是将字符串的首地址赋给指针。
4、指针型函数
所谓指针型函数,即返回值是指针(地址)的函数。
5、多级指针
指向指针的指针(**p)就是二级指针,指向指针的指针的指针(***p)是3级指针。
多级指针类似于间接寻址。
6、指向函数的指针
C语言中的函数名表示函数的首地址,即函数执行的人口地址。
定义形式:[存储类型][数据类型标示符](*指向函数的指针变量名)();
例子: int(*fun)();//指向函数的指针 , int * fun(); //指针型函数,注意(* fun)括号不能少
7、动态指针
当需要一大片内存的时候,最好使用动态分配。
使用malloc函数:void * malloc(size_t size)。
例子:
int * pn=malloc(10*sizeof(int));
double *pd=malloc(10*sizeof(double));
C语言指针变量怎么转化为普通类型变量?
直接在A中用一个赋值语句就可以改变main中变量b的值,例如:*b=10;这样main中b的值就改为10了。
C语言中在函数中定义的变量都是局部变量,仅在该函数中可用。虽然 main 和 A 中都定义了名为 b 的不同类型变量,但这两个不是同一个变量,存储的位置也不同,作用的范围也不同。尽管main调用了 A ,但main中的变量b 在A中是不起作用的。但为什么通过A又能直接改变main中的b呢? 这就是 A 中指针变量 b 的作用了,A 被调用时,A中的 b 被赋予了main 中 b的地址,即 A中的指针 b 指向了 main 中的整型变量 b。在A中对 *b 赋值实际上就是给 main中的 b 赋值,也就可以改变main 中 b 的值。
赋值语句即可传递数值。
指针变量: 声明 int *p; 语句中 *p 表示 值, p 表示 地址。
普通变量: 声明 int x; 语句中 x 表示 值,&x 表示 地址。
#include
int A(int a,int *b)
{
*b=a; //赋值语句即可传递数值
return a;
}
int main()
{
int a,b,c;
a=10;
c=A(a,&b);
printf("%d %d %d\n", a,b,c);
return 0;
}
c语言中指针变量可以相加吗?其含义是什么?
指针变量不可以相加,但指针所指向的值是可以相加的.
指针不可以做乘运算..
指针变量是有加减运算的,但是要注意以下几点:
1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址。指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针变量p的值是0x20000000,那么p=p+2;的值并不是0x20000002,并不是地址值的简单相加,那么地址值加减多少是与指针指向的数据类型相关联的,如果在32位的操作系统上,p是指向整型数据的指针变量,那么p=p+2之后,p的地址值变成0x20000008,也就说实际上地址值加了多少呢:sizeof(int)*2这么多。说明白点,我们加减的数字是以指针指向的数据类型为量度的,P+2表示p在内存中前移两个int的距离,如果p不是int类型,而是其他类型道理也是一样。同样指针与整型数据相减也是同样的道理。
2.指针之间可以相减,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数),例如对于int类型的指针p和p1. p1-p的意义表示他们之间相隔多少个int类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。 指针变量的自加和自减实际上是与整数1的加减运算。
3.指针之间可以比较大小。但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。
C语言中用指针变量指向数组元素
定义数组a为整型
定义指向整型的指针变量P,整型变量i
依次输入十个整数
下一个循环,首先P指向数组首地址,即指向数组第一个元素,然后P依次加一,移向下一地址,
即指向数组下一个元素
依次打印输出
main()
{int
a[10];
//定义数组a为整型
int
*p=a,i;
//p指向a的地址,即a[0]的地址
for(i=0;i<10;i++)
scanf("%d",&a[i]);
//给数组a赋值
printf("\n");
for(p-a;p<(a+10);p++)
//输出数组元素
printf("%d",*p);
//p++表示p指向数组中下一个元素的地址
}
暂时先写这么多,你一开始没给p赋值是不对的~
数组名并不是一个普通的变量,而是一个指向数组首元素的指针。也就是说,我们可以用数组名来初始化一个对应类型的指针。虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:
指针类型
*
数组名[常量表达式];
对指针数组的操作和对指针变量的操作并无不同.
c语言中变量的指针,其含义是指变量的什么?
C语言中的指针主要用来存储变量的地址,如:
int a,*p;
p=&a;
表示p指针指向了a变量的地址,也就是存储了a变量的地址,以后要使用a变量的时候,就可以用*p来使用。
指针指向数据,指针里存的是数据的地址。
指针变量是一个存地址的变量,赋值是只能传地址(跟int型只能赋值整型一样的)
指针变量是有加减运算的,但是要注意以下几点:
1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址。指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针变量p的值是0x20000000,那么p=p+2;的值并不是0x20000002,并不是地址值的简单相加,那么地址值加减多少是与指针指向的数据类型相关联的,如果在32位的操作系统上,p是指向整型数据的指针变量,那么p=p+2之后,p的地址值变成0x20000008,也就说实际上地址值加了多少呢:sizeof(int)*2这么多。说明白点,我们加减的数字是以指针指向的数据类型为量度的,p+2表示p在内存中前移两个int的距离,如果p不是int类型,而是其他类型道理也是一样。同样指针与整型数据相减也是同样的道理。
2.指针之间可以相减,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数),例如对于int类型的指针p和p1.p1-p的意义表示他们之间相隔多少个int类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。指针变量的自加和自减实际上是与整数1的加减运算。
3.指针之间可以比较大小。但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。