参考:https://blog.csdn.net/mhjcumt/article/details/7351032
一.指针的概念
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址 **,它的值直接指向(points to)存在电脑存储器中另一个地方的值。**由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
来自百度
二.指针的自我理解
指针像它的名字一样,起一个指示性作用,类似于数组的下标。通过指针,可以找到变量的地址,再通过"p->data",就可以取出地址中的内容。
总之,始终记住指针是指向的地址。
三指针的相关操作
1.定义指针
cahr *p;
int p;
2.初始化
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是intp=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。
int *p;
*p=7;
程序报错,因为p是指向7所在的地址,*p = 7给p所指向的内存赋值,p没有赋值,所以p所指向的内存位置是随机的,没有初始化的。加粗样式
int a;
int *p;
p=&a;
*p=7;
正确,所以要对指针指向的地址赋值,指针才有意义。
指针必须初始化并且有所指,才有意义
3.指针的迭代
指针始终指向地址的首地址,加一便是下一个地址,减一便是上一地址。
(每个存储空间有一个编号,也就是地址.)
三.关于指针什么时候为他开辟内存空间
1.如果定义指针的时候,指针指向一个有空间的数据则不需要赋值;
2.如果要对指针赋值则需要开辟空间;
(
有意思的东西,我是打出来了一个啥
错因:指针有空间,内存中幼值,但没有所指)
最后:指针在赋值操作之前,必须要进行分配空间操作。