zoukankan      html  css  js  c++  java
  • [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;
    }

    (第一部分,完)

  • 相关阅读:
    FileInputStream 小Demo
    GUI线程 :打字母游戏
    联合线程(案例顾客买蛋糕 :使用join()方法)
    多线程:竞赛
    线程:交通灯
    猜数字游戏
    正则表达式
    音频播放的三种方式:
    进阶篇-用户界面:7.android动画-自定义视图动画
    进阶篇-用户界面:6.android studio使用github开源库实现下拉刷新
  • 原文地址:https://www.cnblogs.com/yyf0309/p/5661724.html
Copyright © 2011-2022 走看看