C语言 -- 指针些许知识点记录

一、指针也是一种数据类型

1、指针也是一种变量,占有内存空间,用来保存内存的地址,也可以使用sizeof(p)来测试指针变量占有的空间大小。注意:在32位系统和64位系统下,指针占有的空间大小是不一样的。

2、*p操作内存

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

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

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

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

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

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

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

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

      含义3、等号(=)左边*p表示给内存赋值,等号(=)右边*p表示取值

      含义4、等号(=)左边 char *p

      含义5、保证所指向的内存块是可以修改的

4、指针是一种数据类型,指的是他所指向的内存空间的数据类型

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

如果定义

unsigned int a = 10;

unsigned int *p = &a;

p++的效果等于(unsigned int *p)+sizeof(a);

注意:建立指针指向谁,就把谁的地址复制给指针

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

二、间接赋值(*p)是指针存在的最大意义

1、指针变量和他所指向的内存块变量是两个不同的概念

2、指针指向某个变量,就是把这个变量的地址复制给指针

3、*p间接复制成立的条件:

      1)2个变量(通常一个实参,一个形参)

      2)建立关系,实参取地址赋给形参指针

      3)*p形参去间接修改实参的值

int num = 0; // 实参

int *p = # // 将num的地址赋值给p,p的值为num的地址

num = 1; // 直接修改

*p = 2; // 通过*形参ßà间接的改变实参的值

      4)函数调用时候,用 指针(形参)改变 n-1 指针(实参)的值

关于野指针的产生的原因以及避免的方法,可以参见https://blog.csdn.net/zhemingbuhao/article/details/89012199

猜你喜欢

转载自blog.csdn.net/zhemingbuhao/article/details/103931863
今日推荐