首页 > 其他 > 详细

指针强化

时间:2018-07-11 21:49:12      阅读:188      评论:0      收藏:0      [点我收藏+]

铁律1:指针是一种数据类型

1)指针也是一种变量,占有内存空间,用来保存内存地址

测试指针变量占有内存空间大小

int a = 10;
    char *p1 = 100;  //分配4个字节的内存
    char ****p2 = 100;


    int *p3 = NULL;

    p3 = &a;

    *p3 = 20; //间接的修改a的值
    ////*就像一把钥匙 通过一个地址(&a),去修改a变量的标示的内存空间
  

 

2)*p操作内存

在指针声明时,*号表示所声明的变量为指针

在指针使用时,*号表示 操作 指针所指向的内存空间中的值

         *p相当于通过地址(p变量的值)找到一块内存;然后操作内存

         *p放在等号的左边赋值(给内存赋值) 

         *p放在等号的右边取值(从内存获取值)

技术分享图片
    {
        int c;
        int *p3 = 20;
        c = *p3;//读内存
        printf("c:%d \n", c);

    }
View Code

3)指针变量和它指向的内存块是两个不同的概念

//含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1; //p++

    {
     不断地给指针赋值,相当于不停地改变指针的指向
char *p4 = NULL; p4 = (char *)malloc(100); p4 = (char *)malloc(200); //0xcc11 }

                  技术分享图片

//含义2 给*p赋值*p=‘a‘; 不会改变指针变量的值,只会改变所指的内存块的值  

  • 如果我们要修改指针所指向的内存空间数据的时候,我们要保证这个可以修改才行。
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *getStr()
{
    char *p1 = NULL;
    p1 = "abcdefg";
    return p1;
}

void main()
{
    char *p;
    p = getStr();
    //printf("%s \n ", p);
    *(p + 2) = j; // 常量区的不能修稿
    printf("%s \n", p);
}

//含义3 =左边*p 表示 给内存赋值, =右边*p 表示取值 含义不同切结!

//含义4 =左边char *p 

//含义5 保证所指的内存块能修改

 

4)指针是一种数据类型,是指它指向的内存空间的数据类型 

含义1:指针步长(p++),根据所致内存空间的数据类型来确定

p++=è(unsigned char )p+sizeof(a);

结论:指针的步长,根据所指内存空间类型来定。

        

注意:     建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。        

                   不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。

 

 

/*

指针做函数参数的问题:
指针是一种数据类型,是指它指向的内存空间的数据类型 
int getABC1(char *p1); int getABC1(char* p1); int getABC2(char ** p2); int getABC2(char * *p2); int getABC2(char **p2); int getABC3(char ***p3); int getABC4(char (*p4)[30]); int getABC4(char (*p4) [30]); int getABC5(char p5[10][30]); int getABC5(char p5[10][30]); //指针做函数参数 形参有多级指针的时候, //站在编译器的角度 ,只需要分配4个字节的内存(32bit平台) //当我们使用内存的时候,我们才关心指针所指向的内存 是一维的还是二维的
*/

 

指针强化

原文:https://www.cnblogs.com/yaozhenhua/p/9296699.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!