基本的概念和基本注意事项:
int*p 其意思是,p是一个指针,它指向一个int型。同时要注意的是:int *p,q ,并不是指pq都为指针,若要表示均为指针应写成:int *p,*q;
以下是我粗暴的理解:
int a=6;
int *p=&a;
//导致的结果:1.*p可以当作a来使用,*p全等于a,当你输出*p的地址和值的时候,输出的是6的地址和a保存的值:6
// 2. p的地址变成了a的地址,同时p的值变成了a地址的值是一个int型。
---------------------------------------------------------------------------------------------------------------
int a[]={0,1,2};
int *p=a; //取数组地址的时候,不用&的符号,其实就说明数组本质上是特殊的指针
//导致的结果:1. *p全等于a,又因为当取数组a与a[0]的地址时,其地址相同,所以*p也可以说全等于a[0]
// 2. 对于p,它的地址等于数组a和a[0]的地址,同时p的值等于a[0]的值,并且p[0]的值等于a[0]的值。
//由上述的第二个结果,对于一个变量如:b=2,可以理解为它是一个数组b[1],当做出*p=&b的操作时
// 会有p[0]=b[0]=2
//如果现在 int *p=&a[2],会有:p[-1]==1,因为此时p[0]==a[2],则p[-1]==a[2-1]==1
指针的用处(目前初接触这个概念)
个人理解主要是用于子函数,可以写一个子函数,参数表中调用指针( &i ) ,
将外部的一个变量( i=6 )的地址写入子函数中,子函数写一个:int*p=&i,通过子函数对指针( *p )的运算,如赋值,加减乘除等,改变 *p的值,从而实现对主函数的变量 i 的改造。我们熟知的scanf函数也是如此,通过一系列操作,在scanf函数中,将%d的值放入某一个指针里面,这个指针指向我们所要存放的变量。
补充:
数组是特殊的指针,也可以这么看 :int a[] --->int * const a,数组是一个常量指针不可以被改变,这也解释了为什么不能 做数组与数组之间的赋值。