c++指针原理 原创
C++指针对于很多新手来说比较难,当年有句话说是真正的程序员用C++,其实说的就是C++里面的指针直接和内存打交道,程序员可以最大限度的访问修改内存。也对程序员提出更高的要求,指针也是C++与其他程序语言最大的区别。我们一起来看看下面的程序。
char x = ‘q’;
char * p = &x;
这是一个非常简单的指针程序,其中x是一个字符变量,p是一个指向(其实就是保存)字符变量地址的指针,说到底指针其实也是变量,因为它们可以保存不同变量的地址,所以它们本身也是变量,因为所有变量地址都是整数,所以指针本质上是整数类型的变量。
但是指针不是普通的整数变量,
比如说:char * p = 100,这就是不对的,因为C++规定指针不可以直接赋值数字(0除外),必须通过C++指定的方式来赋值,比如通过对变量取地址&x,或者通过new关键字分配内存后获得地址,比如:char * p = new char(‘q’);
这些代码其实都是给指针赋值,而且都是赋值的整数,只不过整数的用途不同,有的是普通整数,有的是用来作为地址的整数,C++在这些方面有严格的规定,指针只能用来保存地址整数。而且什么类型的指针就用来保存什么类型变量的地址,比如char * p = new char,这里的p就只能用来保存char类型变量的地址,int* p1 = new int,这里的p1就只能用来保存int类型变量的地址,这就是C++的规矩,从理论上来说指针可以保存任何类型变量地址,因为他们本质上面就是个整数变量,但是因为普通变量的大小不同,为了方便以后通过*去取指针指向空间里面的字节,C++就有了类型匹配的规矩。比如:
char * p = new char;
这里的p本质上是整数变量,它自己就占用4个字节的内存。
*p = ‘q’;
这句话的意思是将p这个指针指向空间的字节取出来赋值,也就是把上面new char空间的1个字节取出来取出来,电脑为什么知道是取出一个字节,就是因为*p的p是char*类型的指针,电脑就知道p保存的是char类型的空间,所以知道只取出来一个字节。如果换成int * p1 = new int; 这时候*p1就要取出四个字节,因为p1是int*类型的指针,这个类型的指针在c++里面是用来保存int类型空间地址,int在c++里面占四个字节,所以C++就知道要取出多少个字节出来赋值。上面提到过,所有指针其实本质上都是用来保存地址的整数,在32位电脑中,地址都是用4个字节的整数,所以在32位系统中(这里拿32位系统举例,64位占8个字节)指针本身就占用内存四个字节。所以指针自己也是有地址的,那么指针的地址用什么来保存呢?很简单,
char c = ‘q’;
Char * p = &c;
Char ** pp = &p;
可以很容易看出,保存指针的地址,只需要在变量的*数量上多加一个*就可以,pp就被称为二级指针,pp也占用四个字节,也有内存地址,那么就可以用
Char ***ppp = &pp;
保存pp的地址,其实*号的个数相当于是程序员告诉C++,这个指针保存的什么级别变量的地址。指针就是用来保存地址的整数变量,只是要按照C++给出等级和类型规则来使用就很简单。
总之C++的指针涉及到很多类型,内存地址和空间方面的知识,今天时间有限就先写到这里,希望对学习C++的同学有帮助。
欢迎关注游戏开发者微信公众号
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://m.blog.kokojia.com/game/b-51.html
- 下一篇: 二进制-计算机真正的编码