| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 moc 于 2018-8-3 22:27 编辑  
 
1、指针也是一种变量,占用内存空间,专门用于存放内存地址 
- void main()
 
 - {
 
 -         char *p1 = NULL;
 
 -         char **p2 = NULL;
 
 -         char ******p6 = NULL;
 
 -         printf("p1:%d\n", sizeof(p1));    // x86下:p1: 4;  x64下:p1:8
 
 -         printf("p2:%d\n", sizeof(p2));    // x86下:p2: 4;  x64下:p2:8
 
 -         printf("p6:%d\n", sizeof(p6));    // x86下:p6: 4;  x64下:p6:8
 
 -         system("pause");
 
 - }
 
  复制代码 
        指针也是一种数据类型,也占据内存空间,x86下占4个字节,x64下占8个字节; 
        不管是多少级指针都一样。 
2、*p —>  操作内存 
        1. 在指针声明时,*即表明要声明的变量为指针变量 
        2. 在指针使用时,*号表示 操作 指针所指向的内存空间中的值  
                *p相当于通过地址(p变量的值)找到一块内存;然后操作内存;形象的说,*就像是一把钥匙,p就像是一扇门(地址),用钥匙去打开门去弄门后面的内存空间(变量的值) ; 根据指针变量的值(内存地址),去弄门后面的值,可以拿出(右),也可以放入(左)。 
        *p放在=号的左边,去修改内存空间的值; 
        *p放在=号的右边,从内存空间去取出值 
 
-         int a = 10;
 
 -         int b = 0;
 
 -         int  *p3 = NULL;  //声明时,标明该变量为指针变量
 
 -         a = 20;        //通过变量名(别名)a直接修改内存空间的值
 
 -         p3 = &a;
 
 -         *p3 = 30;     //通过指针(内存地址)间接修改内存空间的值
 
 -         b = *p3;
 
 -         system("pause");
 
  复制代码 
 
3、指针变量和它指向的内存块是两个不同的概念 
        *含义1  给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;再如:p = p +1; //p++ 
        *含义2  给*p赋值*p='a'; 不会改变指针变量的值,只会改变所指的内存块的值   
        *含义3  =左边*p 表示 给内存赋值, =右边*p 表示取值内存块的值   含义不同! 
        *含义4  =左边char *p  
        *含义5  保证所指的内存块能修改    *比如不能修改像NULL所在的内存空间,和一些自己都不知道的地址中写数据。 
     char *p = "abcdef"  -->先在内存空间的常量区,开辟空间存放常量"abcdef",再把该字符串的首地址赋值给指针p。 
 
 
4、指针是一种数据类型,是指它指向的内存空间的数据类型 
        含义1:指针步长(p++),根据所致内存空间的数据类型来确定 
        p++ 含义为   (unsigned char )p+sizeof(a); 
        结论:指针的步长,根据所指内存空间类型来定。 
 
 |   
 
 
 
 |