• 指针知识梳理8- 指针的指针


    指针的指针:
    我们假定环境都是32位系统。

    1、回想指针变量基本概念

    http://blog.csdn.net/xiaoliu0518/article/details/32707111
    指针变量:是变量,本质是内存。这块内存用来存储地址。


    2、指针的指针

    指针变量的地址:是变量。本质是内存。内存就有地址,存储这个内存的地址依旧要用指针变量。
    指针的指针:依旧是指针变量,用来存储地址。


    指针变量定义基本模型:
    type *p;
    type a;
    p 是一个指针变量,*前面的type 决定了通过p存储的地址怎样訪问内存。p能够存储a这样的变量的内存。




    (1)假设type 为int。那么:
    int *p;
    int a;
    p 存储a的地址。*p的时候。从所存储的地址開始訪问4个字节。依照int的数据组织方式。




    (2)假设type 为char,那么:
    char *p;
    char a;
    p 存储a的地址。*p的时候,从所存储的地址開始訪问1个字节,依照char的数据组织方式。


    (3)假设type 为char*,那么:
    char **P; //为了更好理解 ,能够加个括号 (char*) *p;
    char *a; // (int*) a;
    p 存储a的地址。*p的时候,从p存储的地址開始訪问4个字节,这四个字节存储的是地址。




    (4)假设type 为char**,那么:
    char** *p;
    char** a;
    p 存储a的地址,*p的时候,从p存储的地址開始訪问4个字节,这四个字节存储的是地址。


    3、指针变量所占内存大小

    注意当定义变量的时候一旦有一个 *。那么这个变量就是个指针变量,能够用type *p,这个模型去分析。
    在32位系统中,全部的指针变量,都是用来存储地址。在32位系统中,地址位为32个2进制位,存储地址用4个字节。
    大家能够验证
    sizeof(char*);
    sizeof(int*);
    sizeof(char**);
    sizeof(char********);

    4、综合验证

    验证例如以下代码,并画内存图:
    #include <stdio.h>
    int main()
    {
    	char c = '1';
    	char *p;
    	char **pp;
    	char ***ppp;
    	
    	p = &c;  //p 存储c的地址,通过p能找到c
    	pp = &p; //pp存储p的地址,通过pp能找到p,通过p能找到c
    	ppp = &pp; //ppp存储pp的地址。通过ppp找到pp,通过pp找到p,通过p找到c
    	
    	printf("%p
    ",ppp);
    	printf("%p
    ",&pp);
    	
    	printf("%p
    ",pp);
    	printf("%p
    ",&p);
    	
    	printf("%p
    ",p);
    	printf("%p
    ",&c);
    	
    	/*
    		*p = c;
    		
    		*pp = p;
    		*ppp = pp
    		**pp = *(*pp) = *p = c;
    		
    		**ppp  = *(*ppp) = *(pp) = p;
    		***ppp = *(**pp) = *p = c;
    	*/
    	
    	/*
    	注意1: **pp 运行是一层一层往下找的。先*pp找到p,然后*p 找到c;
    	可以运行的前提是 变量pp存储了变量p的地址,变量p存储了a的地址,否则就会段错误。
    	
    	注意2:pp = &&a;这样的写法是错误的:
    	初学常范的错误是理解是p = &a,那么&a得到的是p:
    	这是错误的,&a得到是数据,数据存储在变量p中,也可以存储在p1中。
    	仅仅能对内存取地址。反应在代码上是对变量取地址。而不能对数据取地址。
    	&a 是数据。不能对数据取地址。
    	
    	*/
    	
    	return 0;
    }













  • 相关阅读:
    PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径
    PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了
    PAT甲题题解-1028. List Sorting (25)-水排序
    BZOJ 1492 货币兑换Cash
    Codeforces 276D Little Girl and Maximum XOR
    Codeforces 526E Transmitting Levels
    Codeforces 335B Palindrome
    BZOJ 2527 Meteors
    Codeforces 449D Jzzhu and Numbers
    FJ省队集训DAY4 T3
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7040176.html
Copyright © 2020-2023  润新知