moc 发表于 2018-8-3 22:24:07

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

本帖最后由 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);
        结论:指针的步长,根据所指内存空间类型来定。

Kitty喜欢小鱼干 发表于 2018-9-9 22:23:41

一直在看,觉得好有用,我正在学《数据结构与算法》(考试要求),虽然看得懂,但底子还得打细一点才行。

moc 发表于 2018-9-9 22:38:32

Kitty喜欢小鱼干 发表于 2018-9-9 22:23
一直在看,觉得好有用,我正在学《数据结构与算法》(考试要求),虽然看得懂,但底子还得打细一点才行。

我后面也会写关于学习数据结构的帖子的,欢迎交流。

Kitty喜欢小鱼干 发表于 2018-9-10 10:54:59

moc 发表于 2018-9-9 22:38
我后面也会写关于学习数据结构的帖子的,欢迎交流。

好的,期待楼主的作品!{:5_105:}
页: [1]
查看完整版本: 005-指针铁律1:指针是一种数据类型