栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C++指针基础(一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++指针基础(一)

  1. 所有的语言中,只要C和C++有指针,因为解释型语言无法拥有指针;
  2. 变量是内存变量的简称,每定义一个变量, 系统就会给变量分配一块内存,内存是有地址的;
  3. 计算机把内存分成很多个单元,最小的单元式字节,每个单元都有一个地址,内存的地址一般用十六进制表示;
  4. 内存的地址从1开始,从地位到高位,最高位是多少不确定,取决于你计算机有多少内存;
  5. 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;
}

指针变量

  1. 指针变量用于存放变量在内存中的起始地址;
  2. 语法:数据类型*变量名;数据类型 *变量名;数据类型* 变量名;(空格可有可无)
  3. 指针是有类型的,如用整型指针存放整型变量的地址,用字符型指针存放字符变量的地址;
  4. 给指针赋值:对指针赋值的操作通常被称为指向某变量,被指向的数据的类型称为基类型,如
       ​​​​​​​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;

  5. 指针类型强制转换
     

    //指针类型的强制转换
    	int aa;
    	char bb;
    	int *paa = (int*)&bb;//强行转换变量b的地址
    	char *pbb = (char*) &aa;
    	

  6. 指针占用的内存:任何类型的指针都占用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

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号