鱼C论坛

 找回密码
 立即注册
查看: 1958|回复: 1

[技术交流] 关于C++指针和数组的个人浅见

[复制链接]
发表于 2016-1-7 15:19:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
//***********************************************************************


个人浅见,如有错误,望大家斧正!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-7 22:06:54 | 显示全部楼层
其实数组也是指针!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 18:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表