① 指针与指针变量的概念是什么
1、指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。
有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
2、指针变量是指存放地址的变量。因地址的改变而做出指定性质的衡量变法。
(1)指针变量可存放存储单元地址扩展阅读:
指针变量定义:
1、定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2、空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3、void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。
但是需要注意void*不能指向由const修饰的变量,例如const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv声明为const void * ptv;,上述第三句ptv = &test才是合法的。
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv;
② C语言当定义一个指针是如何存储的
在 C 语言中,将内存单元的编号或地址称为指针。可通过一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址,或称为某内存单元的指针。它与其他一般变量所不同的是,一般的变量包含的是实际的、真实的数据;而指针只是一个指示器,它告诉程序在内存的哪块区域可以找到数据。
③ 指针“变量里面的值” 和 “指针地址的值” 和 “指针指向的值” 有什么区别
指针“变量里面的值”存放的是内存单元的地址;“指针地址的值”指的是指针的地址值,用“&”表示;“指针指向的值”指的是指针所指向的变量的值,用“*”表示。
指针是编程语言中的一个对象,直接地对地址进行操作,其的值直接指向存在电脑存储器中另一个地方的值。通过地址能找到所需的变量单元,也就是,地址指向该变量单元。由此,地址形象化的被称为“指针”。其意是通过它能找到以它为地址的内存单元。
指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。
(3)指针变量可存放存储单元地址扩展阅读
指针与引用的区别:
一、指针和引用的区别
(1)引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也有可能不指向对象则必须使用 指针.
由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值.
String & rs = string1;
由于没有所谓的 null reference 所以在使用前不需要进行测试其是否有值,而使用指针则需要测试其的有效性.
(2)指针可以被重新赋值而reference则总是指向最初或地的对象.
(3)必须使用reference的场合. Operator[] 操作符 由于该操作符很特别地必须返回 [能够被当做assignment 赋值对象] 的东西,所以需要给他返回一个 reference.
(4)其实引用在函数的参数中使用很经常.
void Get***(const int& a) //这样使用了引用又可以保证不修改被引用的值
{
}
④ 指针变量问题
首先要区别int *p[2]和int (*p)[2],前者定义一个数组,该数组元素类型为整型指针;后者定义一个指针变量,该指针变量指向一个整型二维数组。
1.指针变量代表一个存储单元地址,占用存储单元一般为4个字节-即一个存储单元,(32位计算机)。与其基类型数组无关,因为它仅代表一个地址。
2.指针变量占用的存储单元与编译器有关。16位计算机为2个字节,32位计算机为4个字节。与基类型无关。
⑤ C语言中指针变量只能存储地址
存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
假设在程序中声明了1个int型的变量a,其值为68。系统为变量a分配的首地址为0X65FDF4H,pa是存放变量a地址的指针变量,即pa中存放的值为0x065FDF4H。
对变量a的访问有两种方式:一是直接按地址0x065FDF4H找到a的存储单元,从而对变量a进行访问;二是按系统为pa分配的地址先找到pa,然后根据pa的值(即变量a地址0x065FDF4H)找到变量a在内存中的存储单元,从而对变量a进行访问。对于前一种访问方式称为直接访问方式,后一种访问方式称为间接访问方式。
如果一个指针变量存放的是某个对象的地址,则称这个指针变量指向该对象。在C++程序设计中,指针变量只有确定了指向才有意义。
1. 定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2. 空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3. void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是有一点需要注意void*不能指向由const修饰的变量,eg const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv申明为const void * ptv;上述第三句(ptv = &test),才是合法的.
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv ;
⑥ 论述C语言中指针的概念和作用,并举例说明
1、指针概念:变量的地址(计算机内存字节的编号)叫做指针,存放变量地址的变量叫指针变
量,
简言之,指针是用来存放地址的。
2、作用:指向这个变量或数组的首地址,是变量的间接引用方式。其值如果改变,变量的值或数组元素的值也会跟着改变。程序对变量的操作实际上是对变量所在的存储空间读取和写入数据。方便对变量的操作。
举例说明:
int
a=3;/*定义一个整型变量a,并赋初值3*/
int
*p;/*定义一个指针变量P*/
p=&a;/*让p指向a的首地址,也就是a的地址*/
程序为a分配一个2个字节的存储单元,假如2个字节的地址分别为(ABCD1和ABCD2,唯一),那么p里面放的值就是ABCD1,不是3。这时可通过p直接引用a,实际上*p=3。以后不管a存放在内存中的哪个地方,只用通过调用p就可以引用a。这时如果令*p=4,则最后的a值也为4。对于数组,指针是指向数组的首地址。
⑦ C++中指针中存放的是一个地址,那是不是可以理解为存放这个地址的这个内存空间也有一个地址
任何一个变量的本质都一样,都是内存中的一段特定的空间。
所以指针变量与非指针变量在变量这个层面上是一样的,没区别的,区别体现在编译系统如何理解运用变量中存储的值,比如:
int a,*p
这里定义了两个变量,a是一个int变量,p是一个指针变量,但是a和p存储的其实都是一个数字。区别就在于 系统会 把p中存储的数字当作一个地址去运用,从而跳转到这个地址去操作其中的数据。
⑧ 指针变量存放的是内存地址,那为什么指针还要定义类型
指针定义类型是为了取值及指针运算。
一、指针的本质为内存地址。不管什么类型的指针,其本质都是内存地址。
二、定义指针类型,可以更方便的取值。
不管定义什么指针,保存什么样的地址,其目的都不是为了获取到这个地址值,而是为了访问地址上的数据。 定义了指针类型,就可以很方便的取得数据。
如果指针p类型为long*型,那么当使用*p取值时,就是取p值这个地址上,连续4个字节的数据值。
而如果p类型为char *型,那么使用*p 就是在p这个地址上的一个字节数据。
三、定义指针类型,方便指针运算。
使用指针,最常用的操作除取值为,就是指针的移动,也就是加减运算。通过指针加减,可以很方便的访问相邻或者间接相邻的同类单元。同样的p+1, 不同指针移动的实际内存字节数不同,其值为sizeof(指针指向类型)。
即 对于type * p; p+n的实际偏移地址值为sizeof(type)*n。