指针

动态分配

 #include <stdio.h>
  int *pPointer;
  void SomeFunction()
  {
   // 使pPointer指向一个new的整数
   pPointer = new int;
   *pPointer = 25;
  }
  void main()
  {
   SomeFunction(); // 让pPointer指向某些东西
   printf("Value of *pPointer: %d/n", *pPointer);
   delete pPointer;
  }

向函数传递指针

  #include <stdio.h>
  void AddFive(int Number)
  {
   Number = Number + 5;
  }
  void main()
  {
   int nMyNumber = 18;
   printf("My original number is %d/n", nMyNumber);
   AddFive(nMyNumber);
printf("My new number is %d/n", nMyNumber);
  }

 #include
  void AddFive(int* Number)
  {
   *Number = *Number + 5;
  }
  void main()

  {
   int nMyNumber = 18;
   printf("My original number is %d/n", nMyNumber);
   AddFive(&nMyNumber);
   printf("My new number is %d/n", nMyNumber);
  }

指向类的指针


关于指针,我还有还有两点需要提醒你。其中之一是指向结构或类的指针。你可以像这样定义一个类:
  class MyClass
  {
  public:
   int m_Number;
   char m_Character;
  };
  然后,你可以定义一个MyClass的变量:
  MyClass thing;
  你应该已经知道这些了,如果还没有的话,你需要阅读一下这方面的资料。你可以这样定义一个指向MyClass的指针:
  MyClass *thing;
  就像你期望的一样。然后,你可以为这个指针分配一些内存:
  thing = new MyClass;
  这就是问题之所在了——你将如何使用这个指针?呃,通常你会这么写:“thing.m_Number”,但是对于这个例子不行,因为thing并非一个MyClass,而是一个指向MyClass的指针,所以它本身并不包含一个名为“m_Number”的变量;它指向的结构才包含这个m_Number。因此,我们必须使用一种不同的转换方式。这就是将“.”(点)替换为一个“->”(横线和一个大于号)。请看下面这个例子:
  class MyClass
  {
  public:
int m_Number;
char m_Character;
  };
  void main()
  {
  MyClass *pPointer;
  pPointer = new MyClass;
  pPointer->m_Number = 10;
  pPointer->m_Character = 's';
  delete pPointer;
  }


  指向数组的指针

 #include  <stdio.h>
  void main()
  {
   int Array[3];
  Array[0] = 10;
  Array[1] = 20;

  Array[2] = 30;
   int *pArray;
   pArray = &Array[0];
   printf("pArray points to the value %d/n", *pArray);
   pArray++;
   printf("pArray points to the value %d/n", *pArray);
   pArray++;
   printf("pArray points to the value %d/n", *pArray);
  }

如果是用new为一个数组分配空间的话,就像下面这个样子:
  int *pArray;
  pArray = new int[6];
  那么必须这样释放它:
  delete[] pArray;
  请注意delete之后的[]。这告知编译器它正在删除一个整个的数组,而不是单独的一个项目。必须在使用数组的时候使用这种方法,否则可能会获得一个内存泄漏。


不能delete掉那些没有用new分配的内存,像下面这个样子:
  void main()
  {
int number;
int *pNumber = number;
delete pNumber; // 错误:*pNumber不是用new分配的
  }

----------------------------------------------------------------------------------------------------------

  Q:为什么在使用new和delete的时候会得到“symbol undefined”错误?
  A:这很可能是由于你的源文件被编译器解释成了一个C文件,因为new和delete操作符是C++的新特性。通常的改正方法是使用.cpp作为你的源文件扩展名。

  Q:new和malloc的区别是什么?
  A:new是C++特有的关键词,并且是标准的分配内存方法(除了Windows程序的内存分配方法之外)。你绝不能在一个C C++程序中使用malloc,除非绝对必要。由于malloc并不是为C++面向对象的特色设计的,所以使用它为类对象分配内存就不会调用类的构造函数,这样就会出现问题。

  Q:我能一并使用free和delete吗?
  A:应该使用和分配内存相配套的方法来释放内存。例如,使用free来释放由malloc分配的内存,用delete来释放由new分配的内存。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值