zoukankan      html  css  js  c++  java
  • 指针与数组

    一、指针的内容

    1、提到指针,一定要考虑到内存!

    2、不论指针指向的数据类型是什么,声明了一个指针,该指针就占4个字节(byte),无论是32bit还是64bit;

    3、在指针和数组面前,*是指针表示,取值;&是取地址;

    4、声明一个指针p,那么p是指针,存放着指向所指内容的地址;&p得到指针自己的内存地址;*p得到指针所指向的数值;

    5、以下两种表达式的意义不同:

    第一句是在声明指针的时候对其所指向对地址赋值,相当于p=NULL;后面三句是在声明指针之后,对其所指向的内容进行赋值,即*p=NULL,p!=NULL

    6、直接对地址赋值:

    在VC6.0中每次编译变量的地址都是一样的,但是在visual studio中却不一样,所以这样的做法在VS中未必适用。并且这里要注意必须进行强制类型转换

    二、数组

    数组跟指针...应该算是一对基友吧。举个栗子,按照义下代码来理解:

    int a[5] = { 1, 1, 1, 1, 1 };
    cout << "a:" << a << endl;
    cout << "a+1:" << a + 1 << endl;
    cout << "a-1:" << a - 1 << endl;
    cout << "&a:" << &a << endl;
    cout << "&a+1:" << &a + 1 << endl;
    cout << "&a-1:" << &a - 1 << endl;

    1、a是数组名,同时在内存方面,a表示数组第一个元素的首地址,这里需要与&a区别开来,&a表示数组的首地址,两者的意义不同,但是数值上一般是相同的,但是与也有不同的情况出现,这里会涉及到大端小端的概念。

    a)、a与&a的数值是一样的,都是000000A7B855F6E8,指向了同一个内存地址,但是要区分开来,两者意义不同;

    b)、&a+1表示数组a的下一个数据的地址,因为a是一个包含5个int型元素的数组,所以&a+1为&a+sizeof(int)*5,64bit下,int是4字节,所以加20,也就是加14(这里是16进制表示);

    c)、同样,&a-1表示a的上一个数据,并且,编译器在这里将其大小与a一样,所以&a-1 = &a-sizeof(int)*5;

    e)、a是数组第一个元素的首地址,所以a+1是数组的第二个元素首地址,与a相差4byte;

    f)、a-1则表示数组的上一个“数组的最后一个元素的首”地址,当然,这个“数组”可能不存在或者未必是数组,所以以本数组a为参考,取一个in型为差值,所以相差4byte。

    2、a不能作为左值,但是a[i]可以。

    三、数组还是指针?

    1、都能以指针形式或者数组下标形式访问数据:

    char *pChar = "zcx";    
    char ch[] = "zcx";
    cout << "*(pChar + 2)=" << *(pChar + 2) << endl;
    cout << "pChar[2]=" << pChar[2] << endl;
    cout << "*(ch + 2)=" << *(ch + 2) << endl;
    cout << "ch[2]=" << ch[2] << endl;

    2、声明为数组,定义为指针;或者声明为指针,定义为数组 ---- 都是错的:

    char *pChar2 = NULL;
    pChar2 = {'z'};
    char ch2[3];
    ch2 = "zc";

    四、数组指针、指针数组(不是绕口令)

    1、指针数组,也就是一个数组,每个元素为一个指针:

    int *p1[10];
    //或者应该写成 int* p1[10];

    2、数组指针,也就是一个指针,指向一个数组的指针:

    int (*p2)[10];

    这里再八卦一下有个两个称呼叫:指针函数和函数指针:

    指针函数:本质上就是一个函数,只不过其返回值为某个类型的指针!!!

    函数指针:本质上是一个指针,指向了一个函数的实现地址,通过这个指针可以去调用它指向的函数!!!

    所以谁修饰谁是很重要的。

    鞭影落春堤,绿锦鄣泥卷。

    脉脉逗菱丝,嫩水吴姬眼。

    啮膝带香归,谁整樱桃宴。

    蜡泪恼东风,旧垒眠新燕。

      -- 纳兰性德 《生查子·鞭影落春堤》

    上善若水,为而不争。
  • 相关阅读:
    DELPHI版传奇引擎学习菜鸟篇(applem2)04
    DELPHI版传奇引擎学习菜鸟篇(applem2)03
    学习win32API消息处理
    DELPHI版传奇引擎学习菜鸟篇(applem2)02
    DELPHI版传奇引擎学习菜鸟篇(applem2)01
    读写INI的通用函数
    黑马程序员选择语句 SwitchCase 和break 、return 关键字。
    黑马程序员Readonly和Const的区别
    黑马程序员计算每个字符在字符串中出现的次数
    黑马程序员ADO.NET中的五个主要对象
  • 原文地址:https://www.cnblogs.com/Bearoom/p/11721798.html
Copyright © 2011-2022 走看看