/*===========================*/
/*question */
/*1 什么是指针? */
/*2 什么是数组? 很简单,不赘述*/
/*3 数组与指针的共性是什么? */
/*===========================*/
重点说明指针丶指针和数组共性
//*****************************************************************
1 什么是指针?
指针:指针是变量的内存地址.
example:
//--------code-----------------------------------
#include <iostream>
using namespace std;
int main()
{
int *p; //①
int n=10; //②
p=&n; //③
cout<<"*p="<<*p<<endl; //④
return 0;
}
//------------------------------------------------
Explain:①声明p是指向int型变量的指针(切记)
②n=10,这再明显不过.
③将p指向n的地址,也就是说,当执行
第三行代码时,p指向的地址中存储的
值为10(即:使用&获得变量n的地址)
④输出*p,意思就是输出指针指向地址
(n的地址)中存储的值.
可见指针的类型并不是声明指针时用的整型
指针是一个地址内存的地址是一个数字但是
千万不要以为这个数字可以存到int或double
型的变量中 这是大错特错的 why?
因为这是传统!(萨维奇教授说的)
指针指向一个地址 这个地址由来确定
如果你省去第二丶三行 直接将第一句改为
int *p=10 这也是错误的 因为指针的地址
在你创建指针时已经确定 你不能通过这种
方式修改指针指向的内存地址
*是取值操作符 &是取址(地址)操作符 显然
在p=&n中 指针p获取了变量n的内存地址 当
进行*p输出时使用*就获取了变量n的值(因为
指针指向了n所在的地址) so easy aha?
Summary:指针指向一个内存地址.
//-------------------------------------------------
Thinking1:现在声明了一个变量,如何看到它在内存中
的什么位置?
ans:使用cout语句直接输出p或者&n;
//--------------------------------------------------
Thinking2:指针可以计算吗?
ans:不能进行标准算术运算,可以进行某种形式的加减
操作.例如和数组合用时,可以通过地址偏移找到某
个数组元素.
//--------------------------------------------------
//*************************************************************
2.数组
这个就不多说了吧.
//*************************************************************
3.数组与指针的共性是什么?
如果没有搞清楚指针,请不要看这节,免得一直处在眩晕的状态中.
数组总是以第一个元素的内存地址作为初始地址,而不会记录其它元素
的地址,你家住在黄土高坡,黄土高坡的第一百家是你家,你总不至于通
过挨家挨户的开门看来确定吧,一个很显而易见的办法是,你记得你家的
门牌号,确定好第一家门牌号,你就可以数到100进门,那确实是你家没错
指针指向一个地址,既然你家是100号,开始的时候指针指向黄土高坡一号
你通过指针(地址)偏移到100,那就是你家,准没错.
//**********************//
// 共性:内存地址. //
//**********************//
//利用指针遍历数组地址(核心:遍历)
#include <iostream>
using namespace std;
int main()
{
int a[5]={2,5,8,3,7};
int *p;
for(p=a;p<(a+5);p++) //首条件:指针指向数组首地址
{
cout<<*p<<endl; //过程:指针对数组地址进行
} //遍历,向数组地址取值
return 0;
}
//------------------------------------------------------------------
//使用数组首地址进行偏移取值(核心:偏移)
#include <iostream>
using namespace std;
int main()
{
int a[5]={2,3,4,5,6};
int *p;
p=a;//为何不用&a:因为a本身就是地址,取地址后再取地址是不对滴
for(int i=0;i<5;i++)
{
cout<<*(a+i)<<endl;
}
return 0;
}
//***********************************************************************
个人浅见,如有错误,望大家斧正!