zoukankan      html  css  js  c++  java
  • 8、C++指针和自由存储空间

    8、C++指针和自由存储空间
      
    计算机程序在存储数据时必须跟踪3中基本属性。

      • 信息存储在何处
      • 存储的值为多少
      • 存储信息是什么类型。  

              指针是 一个变量,其存储的是值得内存地址

      对于常规变量的地址,只需要对变量应用地址运算符(&),就可以获得它的位置;例如,如果home是一个变量,那么&home就是他的地址。

    #include "stdafx.h"
    #include <iostream>    //引用库函数
    using namespace std; //使用命名空间
    
    struct inflatable
    {
    	char name[20];
    	float volume;
    	double price;
    };
    
    
    int main()           //主函数,程序执行的入口
    { 
    
    	int donuts = 6;
    	double cups = 4.5;
    	cout << "donuts value = " << donuts;
    	cout << "and donuts address = " << &donuts << endl;
    	cout << "cups value = " << cups;
    	cout << "and cups address = " << &cups << endl;
    	cin.get();
        return 0;          //函数返回值
    }
    

      结果:

     

     因此,指针名表示的是地址。* 运算符被称为间接值(indirect velue)或解除引用(dereferencing)运算符,将其应用于指针,可以得到该地址存储的值(这和乘法使用的符号相同,C++根据上下文来确定所指的是乘法还是解除引用)

    1、指针申明与初始化:

      指针声明必须制定指针的数据的类型

    int * p_updata
    

    这表明,p_updata的类型为int,由于*运算符被用于指针,因此p_updata变量本身必须是指针。可以这样说,p_updata是指针(地址),而*p_updata是int,而不是指针。

    #include "stdafx.h"
    #include <iostream>    //引用库函数
    using namespace std; //使用命名空间
    
    struct inflatable
    {
    	char name[20];
    	float volume;
    	double price;
    };
    
    
    int main()           //主函数,程序执行的入口
    { 
    
    
    	int hig = 5;
    	int * pt = &hig;
    	cout << "Value of hig =" << hig
    		<< ";Address of hig =" << &hig << endl;
    	cout << "Value of *pt =" << *pt
    		<< ";value of pt =" << pt << endl;
    	cin.get();
        return 0;          //函数返回值
    }
    

      结果:

    2、指针的危险:

      C++在创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤。

    long *fellow;           //创建一个指针
    *fellow = 223323;  //为指针赋值,但是fellow,没有被赋值,所以不知道fellow代表的地址是多少,所以不知道223323将会存储在内存中的哪里。
    

       警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个人确定的、适当的地址。

    3、指针和数字

      

    4、使用new来分配内存

      在C语言中可以使用malloc()函数来分配内存,在C++中仍然可以,但C++还有更好的方法——new运算符    

     

    5、使用delete释放内存

    6、使用new创建动态数组

      

  • 相关阅读:
    软考估分
    极限编程(XP)12个最佳实践
    常见符号的英文读法
    又一道信号量的问题--做多了就容易错
    一道信号量前驱图的题目--有技巧
    信号量计算问题--n个进程, 共享3个资源, 当前信号量为-1, 其他进程继续执行P操作, 那么信号量应该继续减
    一道信号量的问题---卖火车票
    一道关于信号量的问题
    一道关于信号量的题目
    C语言int型数据范围
  • 原文地址:https://www.cnblogs.com/wanshuai/p/9089617.html
Copyright © 2011-2022 走看看