首先需要明确的是几个基础问题
1.数组名代表的是数组的首地址
2.用指针指向数组的首地址两种方法
p = &a[0] 或者p=a 二者等价
3.指针赋值方式
int *p,*p1,*p2,i,a[20];
(1)p= &i; 完成的功能:将变量 i 的地址赋值给指针 p,即:p→i。
(2)p= a; 完成的功能:将数组 a 的首地址赋值给指针 p,即:p→a[0]。
(3)p= &a [i]; 完成的功能:将数组元素 a[i]的地址赋值给指针 p,即:p→a[i]。
(4)p1= p2; 完成的功能:将指针变量 p2 的值赋值给指针 p1,即:p1 与 p2 指向同一个地址。
指针的自增自减:
大致可以分为 8 种格式:
(1)指针变量++ 例如:p++;
(2)++指针变量 例如:++p;
(3)指针变量-- 例如:p–;
(4)–指针变量 例如: --p;
(5)指针变量*++ 例如:*p++;或 (*p) ++;
(6)++*指针变量 例如:++*p; 或 ++(*p);
(7)*指针变量-- 例如:*p–; 或 (*p) --;
(8)–*指针变量 例如: --*p; 或 --(*p);
注意:
这里的++,–代表的意思是增加一个单位,在指针左边代表先进行加减再运算算,在右边代表先进行运算再加减
下面讲解++,–同理;
1.p++:运算规则:先取 p 的值作为表达式的值,然后将 p 后移指向下一个内存单元。
2.++p:运算规则:将 p 后移指向下一个内存单元,然后取 p 的值作为表达式的值。
这里可能看不出来有什么区别,因为是单独作为语句,放在一起输出对比一下先后++的顺序就知道了
为2的原因是p的指向是a[0]的值,也就是1,所以++的话就是a[0]+1=2;
这里补充一点,指针是可以改变数值的
具体举例子
这是两个都指向同一个数组的指针,改变两次++,加了两次1,所以是3
要注意使用指针–的时候不要越界,a[0]这种已经是指针的首地址了,再减就要指向其他的地址就会出问题!!!!!!!!
运用指针的指向改变的数组,再次使用指针会保留上次的值,以上的例子只是单独使用,保证能理解基础。
附上完全代码和截图 p++;
/* //(2)++指针变量 例如:++p; ++p;
/* ///(5)指针变量++ 例如:*p++;或 (*p) ++; /* //(6)++*指针变量 例如:++*p; 或 ++(*p); /*
#include
int main()
{
int a[]={1,5,9,13,17};
int *p=a;
int d=a;
/ //(1)指针变量++ 例如:p++;
cout<
cout<
cout<
cout<
//(3)指针变量 例如:p–;
//(4)–指针变量 例如: --p;*/
*p++;
(*d)++;
cout<<*p<<" "<<d<
++*p;
++(*d);
cout<<*p<<" "<<d<
//(7)*指针变量-- 例如:*p–; 或 (*p) --;
//(8)–*指针变量 例如: --*p; 或 --(p);/
}