• 指针数组,和指向指针的指针


    今天终于弄明白了,指针数组,和指向指针的指针的区别。

     1 #include <stdio.h>
     2 #include <string.h>
     3 void main()
     4 {
     5     
     6     char a[]="1234567890MMMMMMM";
     7     char *p= a;
     8     char** argv=&p;
     9     printf("%s\n",*(argv+0));
    10         //char *argv[]={"12345","67890","MMMMMMM"};
    11     //for(i=0;i<3;i++)
    12     //{
    13     //    printf("%s\n",argv[i]);
    14     //}
    15 }
    一. 指针概念:
    当我们程序如下申明变量:
    short int i;
    char a;
    short int * pi;
    程序会在内存某地址空间上为各变量开辟空间,如下图所示。
    内存地址→6     7      8     9     10     11    12    13     14    15
    -------------------------------------------------------------------------------------
    …  |     |      |      |      |      |       |      |      |      |  
    -------------------------------------------------------------------------------------
        |short int i |char a|      |short int * pi|
    图中所示中可看出:
    i 变量在内存地址5的位置,占两个字节。
    a变量在内存地址7的位置,占一个字节。
    pi变量在内存地址9的位置,占两个字节。(注:pi 是指针,我这里指针的宽度只有两个字节,32位系统是四个字节)
    接下来如下赋值:
    i=50;
    pi=&i;
    经过上在两句的赋值,变量的内存映象如下:
    内存地址→6     7      8     9     10     11    12    13      14     15
    --------------------------------------------------------------------------------------
    …  |    50      |      |      |    6         |      |      |       |  
    --------------------------------------------------------------------------------------
        |short int i |char a|      |short int * pi|
    看到没有:短整型指针变量pi的值为6,它就是I变量的内存起始地址。所以,这时当我们对*pi进行读写操作时,其实就是对i变量的读写操作。如:
    *pi=5;   //就是等价于I=5;

    二. 指针的地址与指向另一指针地址的指针
    我们看到,指针变量本身与
    其它变量一样也是在某个内存地址中的,如pi的内存起始地址是10。同样的,我们也可能让某个指针指向这个地址。
    看下面代码:
    short int * * ppi;    //这是一个指向指针的指针,注意有两个*号
    ppi=pi
    第一句:short int * * ppi;——申明了一个指针变量ppi,这个ppi是用来存储(或称指向)一个short int * 类型指针变量的地址。
    第二句:&pi那就是取pi的地址,ppi=pi就是把pi的地址赋给了ppi。即将地址值10赋值给ppi。如下图:
    内存地址→6     7      8     9     10     11    12    13       14    15
    ------------------------------------------------------------------------------------
    …  |    50     |      |      |      6       |       10      |      |  
    ------------------------------------------------------------------------------------
        |short int i|char a|      |short int * pi|short int ** ppi|
    从图中看出,指针变量ppi的内容就是指针变量pi的起始地址。于是……
    ppi的值是多少呢?——10。
    *ppi的值是多少呢?——6,即pi的值。
    **ppi的值是多少呢?——50,即I的值,也是*pi的值。

  • 相关阅读:
    es6 数组的扩展
    面向对象的7大原则及其实例
    flex 布局
    一、创建vue
    箭头函数
    destructuring
    spreed&rest
    变量新声明之let、const
    jQuery之遍历索引相关方法
    jQuery之位置坐标图形相关方法
  • 原文地址:https://www.cnblogs.com/kakaliush/p/1694923.html
Copyright © 2020-2023  润新知