指针

指针是一个变量,存储的是值得地址,假设 a 是一个变量,那么&a就是他的地址。#include<iostream>

using namespace std;
int main()
{
  int a=10;
  cout<<a<<" address = "<<&a<<endl;
}



***********************************************
#inlude<iostream>
using namespace std;
int main()
{
  int a=10;
  int* p ; //声明了一个int型的指针
  p = &a;
  cout<< a <<" "<<*p<<endl; // 10 10
  cout<<&a<<" "<<p<<endl;
*p=*p+1; // 11
cout<<a<<endl;
}
**********************
指针的危险
在C++中创建指针的时候,计算机将分配用来存储地址的内存,但不会分配 存储 指针所指向的数据 的内存
int* p;
*p = 10;
p是一个指针,但并不知道他指向哪里,上述代码并没有将地址赋给p,那么10存储在哪呢,并不知道,如果p的值恰巧是程序代码的地址,但很有可能并不是要存储10的地址。

*******************************
之前我们都是将指针初始化为变量的地址,变量是在编译时分配的有名称的内存,而指针只是可以通过名称直接访问的内存提供一个别名。
而指针的真正的用武之地是在运行阶段分配未命名的内存来存储值,在这种情况下,只能通过指针来访问内存,NEW运算。
int* p = new int;
new int告诉程序,需要适合存储int的内存,new运算根据类型来确定需要多少字节的内存,然后,找到这样的内存,返回地址,赋给p,p就是指向int的指针。
比较:
int a;
int* pp = &a;
这两种情况,都是将一个int变量的地址赋给了指针,在pp中,我们可以通过名字a来访问该int,在第一种情况下,只能通过指针来访问。
new分配内存块在堆中,而变量的则在栈中。
delete只能释放new出来的内存块,但是指针并不消失,还可以重新指向另一个新分配的内存块。
*******************************************
#include<iostream>
uisng namespace std;
int main(){
  double* p = new double[3];
  p[0] = 0.1;
  p[1] = 0.2;
  p[2] = 0.3;
  cout<<p[1]<<endl; // 0.2
  p = p+1;
  cout<<p[0] <<" "<< p[1]<<endl; //0.2 0.3
p=p-1; //与最开始一样了
delete[] p;
  return 0;
}
****************************************************
#include<iostream>
using namespace std;
struct infla
{
  char name[20];
  float v;
  double pri;
};
int main()
{
  infla* p = new infla;
  cin.get(p->name,20);  //hhx
  cin.get(*p).v; //1.4
  cin>>p->pri;  // 27.9
  cout<<(*p).name<<endl;  // hhx
  cout<<p->v<<endl; //1.4
  cout<<p->pri<<endl;  //27.9
  delete p;
  return 0;
}

 

posted on 2018-07-05 14:19  hhhhx  阅读(90)  评论(0)    收藏  举报

导航