• [c/c++]指针(1)


      指针算是一种特殊的变量,它存储的是一个内存地址,你既可以通过它来给制定内存地址赋值

    (可能会被操作系统收回或者与其它程序冲突),又可以提高运行速度


    First Step:

    声明一个指针变量

    1 int* a;
    2 char* pc;

    貌似只用在变量后面加一个*就行了

    那这又有什么区别:

    int *c;
    int* d;

    虽然这样没有什么区别,

    但是,这样的话,编译器看起来就不一样了:

    int* c,d;

    这就等价于:

    int* c;
    int d;

    是不是发现了什么不对的地方,可是编译器确实会把d当成int类型

    不如用这段代码看看编译器会不会报错

    int *c = 0x0700;        //温馨提示:不要指望不会运行出错
    int* a = c,b = c;

    到了这里,你就完成指针的声明


    Then:

    给一个指针赋值:

    int* c = ( int * ) 0x07fa6dbc;
    char* d = ( char * ) 0x03a3421;

    是的,没有错,第一种就这么简单,就像这么强转一下就行了,所有指针类型都可以强转,因为

    你可以把它们都看成特殊的int类型

    还有其它的方法:

    1 int a = 123;
    2 int* pa = &a;

    把a的地址赋给pa,是不是还是很简单?

    那恭喜,又完成了一步


    Then:

    访问指针指向的数据:

    int c = 233;
    int* a = &c;
    cout<<*a;

    就只需要加个*就行了,不过这时就要和之前什么XX*有关系了

    XX代表的是指针指向的数据的类型

    如果与这个数据不符,访问时就要小心程序duang的一声崩了


    THE END:

    在这是不是还没有体会到指针的用途,还可用相关函数或运算符开辟内存空间

    比如:

    int* a = new int;
    *a = 233;

    如果没有‘=’后面的内容的话,可能赋值的时候与其他内存冲突,就。。。(请自行脑补)

    new是c++的关键字,那玩c的同学怎么办?

    别着急额,在<malloc.h>头文件中有个函数void* malloc(size_t)可以分配内存

    size_t是开辟的空间的大小(单位字节)

    返回时开辟的内存的首地址,对于各种指针,只需要强转一次就好了

    #include<malloc.h>
    ......
    int main(int argc,char* argv[]){
        int* c = ( int * )malloc(sizeof(int)*100);
        ......
        return 0;
    }

    (第一部分,完)

  • 相关阅读:
    小、快、简、易、强的“银弹”— fastm
    使用Creative suite 3和Flex Builder3实现Flex 3的换肤
    Apache HTTP Server 与 Tomcat 的三种连接方式介绍
    iframe自动适应付窗口的大小变换
    Flash网络游戏开发入门经验共享
    比较详细的 Linux Top 命令解析
    HttpContext是干什么的
    asp.net,cookie,写cookie,取cookie 的方法
    为什么我们不要 .NET 程序员
    在Ubuntu上安装使用深度影音&深度音乐(推荐)
  • 原文地址:https://www.cnblogs.com/yyf0309/p/5661724.html
Copyright © 2020-2023  润新知