- 所有的语言中,只要C和C++有指针,因为解释型语言无法拥有指针;
- 变量是内存变量的简称,每定义一个变量, 系统就会给变量分配一块内存,内存是有地址的;
- 计算机把内存分成很多个单元,最小的单元式字节,每个单元都有一个地址,内存的地址一般用十六进制表示;
- 内存的地址从1开始,从地位到高位,最高位是多少不确定,取决于你计算机有多少内存;
- C++用·“&”获取变量在内存中的起始地址;
// PointerTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include#include //不加这一行string类型会报错 using namespace std;//指定缺省的命名空间,缺省,默认的意思 int _tmain(int argc, _TCHAR* argv[]) { int a; char b; bool c; string d; //cout有bug,在显示地址的时候会把地址当做字符串来显示,因此显示出的地址会有乱码; cout << "a的地址是:" << &a << endl; cout << "b的地址是:" << &b << endl; cout << "c的地址是:" << &c << endl; cout << "d的地址是:" << &d << endl; //解决cout这个bug的办法有两种,其一,把地址强制转换为void*: cout << "a的地址是:" << (void*)&a << endl; cout << "b的地址是:" << (void*)&b << endl; cout << "c的地址是:" << (void*)&c << endl; cout << "d的地址是:" << (void*)&d << endl; //其二,把地址强制转换成整数,以上两种方式都是十六进制显示地址,这种方法是用十进制显示了地址,由于地址的长度都很长,因此int是不够的,需要用long long类型: cout << "a的地址是:" << (long long)&a << endl; cout << "b的地址是:" << (long long)&b << endl; cout << "c的地址是:" << (long long)&c << endl; cout << "d的地址是:" << (long long)&d << endl; system("pause"); return 0; }
指针变量
- 指针变量用于存放变量在内存中的起始地址;
- 语法:数据类型*变量名;数据类型 *变量名;数据类型* 变量名;(空格可有可无)
- 指针是有类型的,如用整型指针存放整型变量的地址,用字符型指针存放字符变量的地址;
- 给指针赋值:对指针赋值的操作通常被称为指向某变量,被指向的数据的类型称为基类型,如
int *pa; pa = &a;
中,可以说成,让指针pa指向变量a,pa的基类型是int;//指针的赋值 int *pa; char *pb; bool *pc; string *pd; pa = &a; pb = &b; pc = &c; pd = &d; cout << "a的地址是:" << (long long)pa << endl; cout << "b的地址是:" << (long long)pb << endl; cout << "c的地址是:" << (long long)pc << endl; cout << "d的地址是:" << (long long)pd << endl;
-
指针类型强制转换
//指针类型的强制转换 int aa; char bb; int *paa = (int*)&bb;//强行转换变量b的地址 char *pbb = (char*) &aa;
-
指针占用的内存:任何类型的指针都占用8个字节的内存空间(老师的教程说的是8字节,我自己的电脑显示是4字节,原因如下:
指针其实就是地址, 与它所指的基类型无关, 更与C语言无关, 只与机器有关. 如果你的机器是16位寻址的, 那指针就是16位的,2个字节, 如果是32位寻址的, 指针也是32位的,4个字节.如果寻址是64位的,指针也是64位,8个字节,此外注意int float 一般是4个字节,double 是8个字节,对于字符串str[]=“xunlei”,其字符串长度是6,但是sizeof(str)是7,因为“0”,在程序体内也占用一个字节。
————————————————
版权声明:本文为CSDN博主「shoushudao111」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/anhuibozhoushatu/article/details/70880750)//指针占用的空间 cout << sizeof(pa) << endl; cout << sizeof(pb) << endl; cout << sizeof(pc) << endl; cout << sizeof(pd) << endl; cout << sizeof(int*) << endl; cout << sizeof(char*) << endl; cout << sizeof(string*) << endl; cout << sizeof(bool*) << endl;
教程:https://www.bilibili.com/video/BV16T4y1w7wm?spm_id_from=333.337.search-card.all.click&vd_source=64331c4314a09f7b913262751287c11b