|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- /*===========================*/
- /*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;
- }
- //***********************************************************************
- 个人浅见,如有错误,望大家斧正!
复制代码 |
|