指针存储
① C语言中指针变量只能存储地址
指针变量是一个变量,它保存的是另一个变量的内存地址。你如果知道了这个指针变量保存的值,就可以知道它所指向变量的内存地址,于是就可以间接访问到那一个变量。
定义:指针变量类型
*指针变量名1,
*指针变量名2,
...
;
例如:
int
main(void)
{
int
*p;
/*定义*/
int
a;
p
=
&a;
/*把a的地址赋值到p中*/
*p
=
1;
/*间接访问a*/
return
0;
}
把指针作为函数的参数传递,可以使函数可以访问函数外部的变量,例如:
void
swap(int
*a,
int
*b)
{
int
c;
c
=
*a;
*a
=
*b,
*b
=
c;
}
指针也可以用于传递数组,数组名本身就是一个指针:
void
func(int
a[],
int
n)
{
.....
}
指针还可以指向指针,指向结构体(struct),指向数组
int
**p;
/*指向int指针*/
struct
xxx
*p;
int
(*p)[100];
/*指向一个int[100]数组,括号不可少*/
② 指针的存储类型和数据类型的意义是什么
1.定义指针指定的数据类型是指指向数据的类型,并不是指针的类型,指针的数据类型是内存地址类型。
2.之所以定义指针时指明它指向数据的类型,是因为有些数据类型不能进行某些操作(运算),比如两个char相乘(或相除)没有任何意义。假如说定义指针时不需要指明它指向数据的类型,那么有指针p1和p2,那么(*p1)*(*p2)在不知道p1和p2指向的数据类型时就不能保证它对数据类型运算的限制了;
3,如果你只是想用指针保存一下数据的内存地址而不去对它进行运算你可以定义void类型的指针,它能指向任何数据类型,但是他不能进行任何运算。
另外你看下C++ Primer这本书,他对指针说明的很详细
③ 请通俗一点的讲讲指针是怎么存储的
指针是存储内存地址的变量,只是一种变量而已
就像int的变量存储整形
就像float的变量存储浮点形
就像char的变量存储字符形
就像double的变量存储高精度浮点形
char *,int *,float* 定义的指针都是一样的,用来存放内存地址.一般来说可以存储2^32次方那么大的内存地址.
之所以有那么多类型的指针是方便写代码,同时支持指针的自我加减操作.
最终的操作都是转化成void*的指针来操作
假设你要读取内存地址为0x5201314的那块内存 void *p = 0x5201314;
cout<<(int)*p;//读取4个字节
cout<<(char)*p;//读取1个字节
。。。。。。
④ C语言当定义一个指针是如何存储的
在 C 语言中,将内存单元的编号或地址称为指针。可通过一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址,或称为某内存单元的指针。它与其他一般变量所不同的是,一般的变量包含的是实际的、真实的数据;而指针只是一个指示器,它告诉程序在内存的哪块区域可以找到数据。
⑤ 在C语言中一个指针占用多少字节。
指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关。譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。
(5)指针存储扩展阅读:
1)指针的含义
指针不同于一般变量,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间),所以不同类型的指针长度都一样比如说一个char1字节,可以存在0x0,也可以位于0xFFFFFFFF,比如你的32位系统。
2)指针的范围
指针长度为4,在64位操作系统下那么就都是8了,而和char占用1字节还是100字节无关,指针的范围只和机器字和系统有关。
3)变化的范围
如果你输出的是444,说明指针长度为4字节可以记录的地址范围是0x00000000~0xFFFFFFFF,这个范围才是指针变量的值。
4)指针的介绍
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。
⑥ 请问指针在内存中如何存储的
和普通变量一样存储。32位机器是4字节,64位机器是8字节。
⑦ 指针是如何被存储到硬盘上的
就如链表等数据结构一样,他只需要定义一个指针(如*P),如果他要下一个,只要知道(P->NEXT)就可以了,不用知道确切地址的,磁盘里的程序就是按这种方式储存的(一部分),一但程序装入了内存,分配了空间,那么指针才真正生效
⑧ 指针能储存多个值吗 可以把整个数组都储存到一个指针里面吗
问这个问题,说明你根本还不知道什么是指针,一个指针只能存放一个地址,这个地址是一个数据在内存中的地址,因为数组里面的数据在内存中是连续存放的,所以用一个指针指向数组的首地址,要访问数组第二个元素,可以将指针后移一位,
比如说
int iArray[10];
int *p = iArray;(数组名即表示数组的首地址)
for(int i = 0; i < 10; i++)
{
*(p + i) = i; //(指针向后偏移 i 位)
cout<<iArray[i]; //(0,1,2,3,4,5......,9)
}
⑨ 指针存储器和变址存储器的区别
指针用来指向一个地址。使用这种寻址方式的优点在于可以在程序运行过程中实现变址。 指针用于存储器间接寻址