在明白什么是指针之前,我们先看两个符号
‘&’取地址符号
‘*’取值符号
具体含义就是
假设i是一个普通变量且i=9;,存储在10010这个地址内
那么“&i”的值,就等于10010
假设p=10010(首先声明只是假设,指针不允许直接赋值)
“*p”的值,就等于i的值,也就是9;
结合例子具体分析一下:
比如:
int i = 6;
printf("%d\n",&i);
printf("%d\n",i);
第一个输出的一个地址,第二个就是i的值,具体可以自己试验一下
值得一提的是,“&” 和“*”可以称作逆运算
也就是说*(&i) 是等于i的
反过来却不行,&(*p)却是不允许的,因为存在内存风险
指针的定义和声明:
int *p; char *name;
这里面的p从本质来讲,还是一个变量,只不过他储存的是一个地址,这个地址下存的是我们需要的值,而我们普通的变量存储的是普通的数;
具体的理解大概就是你看一本书,p是一个页码,这个页码,有你想看的内容,普通变量是直接存了你想要的内容。
还可以理解为p是一个快捷方式
指针的初始化
//正常初始化/
int i;
int *p;
p = &i;
//简略初始化
int i ;
int *p = &i;
从这里也可以看到 P 是一个地址变量,*p是指我去p这个地址下取值。所以p是一个特定地址,*p是这个地址储存的值
这有一个很有代表性的例子 供大家理解品尝:
#include <iostream>
void swap(int *i,int *j)
{
int temp;
temp = *i;
*i = *j;
*j = temp;
cout << "i = "<<*i<<","<<"j = "<< *j<<endl;
}
int main ()
{
int x = 521;
int y = 1314;
swap (&x,&y);
cout << "x = "<<x<<","<<"y = "<< y<<endl;
}
由于涉及到内存,比较危险,所以指针规定了一些不能做的事情,具体是以下几个:
/指针变量不可以直接赋值///
int *p;
p = 10010;
/这是不允许的,指针变量直接赋值很危,当然,你也编译不过去//
int p = 10010;
cout<<&(*p)<<endl;
///这也是直接给指针变量赋值,虽然比较委婉,但也是不允许的/
///PS:如果你一定要试一下,做好以下准备,先备份你所有的资料,下载好一个系统,制作好系统盘,祝你成功.....
最后提一嘴指针的好处吧:
引用类型,传递地址,以及减少内存消耗,比较常见的就是减少内存消耗;
具体含义,大家做项目的时候会慢慢体会到的
多谢观看,如有错误,请直接指正,感谢指教