list对象指针与指针类型list

 

 1 #include <string>
 2 #include <cctype>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <list>
 6 using namespace std;
 7 class Base{
 8 public:
 9         int data;
10         Base(int y):data(y){}
11 };
12 Base *pt(int x){
13         Base *tmp = new Base(x);
14         return tmp;
15 }
16 int main()
17 {
18 
19         string str("ceshi andx 123 benjing");
20         int x = 0;
21         char first[6] = {0};
22         char last[16] = {0};
23         char mid[16] = {0};
24         int ret = sscanf(str.c_str(), "%s%s%d%s", first, mid, &x, last);
25         cout << ret <<  " first:" << first << " mid:" << mid << " x:" << x << " last:" << last << endl;
26 
27         //int指针类型的list
28         list<int *> intptr;
29         int *tmp = new int[5];
30         for(int i=0; i<5; i++){
31                 tmp[i] = i;
32                 intptr.push_back(&tmp[i]);
33         }
34         list<int *>::iterator liter;
35         for(liter  = intptr.begin(); liter != intptr.end(); ++liter)
36                 cout << **liter << endl;
37         for (std::list<int*>::iterator it = intptr.begin(); it != intptr.end();it++)
38         {
39                 //delete &it; //error
40         }
41         delete[] tmp;
42 
43         //以下list对象指针均建立在堆上,需要new/delete结合申请与释放
44         //list元素为基本数据类型的对象指针      
45         list<int> *ptr = new list<int>[2]; 
46         ptr->push_back(2);
47         ptr->push_back(3);
48         list<int>::iterator iter;
49         for(iter  = ptr->begin(); iter != ptr->end(); ++iter)
50                 cout << *iter << endl;
51         delete[] ptr;
52         //list元素为自定义类型的对象指针
53         list<Base> *pBase = new list<Base>[5];
54         Base ba(4);
55         Base bb(5);
56         pBase->push_back(ba);
57         pBase->push_back(bb);
58         list<Base>::iterator iterb;
59         for(iterb  = pBase->begin(); iterb != pBase->end(); ++iterb)
60                 cout << (*iterb).data << endl;
61         delete[] pBase;
62 
63 }

 

转载于:https://www.cnblogs.com/guxuanqing/p/7253890.html

要明白什么是指针,必须先要弄清楚数据在内存中是如何存储的,又是如何被读取的。 如果在程序中定义了一个变量,在对程序进行编译时,系统就会为这个变量分配内存单元。编译系统根据程序中定义的变量类型分配一定长度的空间。内存的基本单元是字节,一字节有8位。每字节都有一个编号,这个编号就是“地址”,它相当于旅馆的房间号。在地址所标示的内存单元中存放的数据,就相当于在该旅馆房间中居住的旅客。 大家一定要弄清楚“内存单元的地址”和“内存单元的内容”这两个概念的区别,即“房间号”和“房间内所住客人”的区别。在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。这种按变量地址存取变量的方式称为直接访问方式。 还有一种间接访问的方式,即变量中存放的是另一个变量的地址。也就是说,变量中存放的不是数据,而是数据的地址。就跟寻宝一样,可能你按藏宝图千辛万苦找到的宝藏不是金银珠宝,而是另一张藏宝图。按C语言的规定,可以在程序中定义整型变量、实型变量、字符型变量,也可以定义这样一种特殊的变量,它是存放地址的。 由于通过地址能找到所需的变量单元,所以可以说,地址“指向”该变量单元。如同一个房间号指向某一个房间一样,只要告诉房间号就能找到房间的位置。因此在C语言中,将地址形象地称为“指针”,意思就是通过它能找到以它为地址的内存单元。 所以,一个变量的地址就称为该变量的指针指针就是地址,而地址就是内存单元的编号。它是一个从零开始的、操作受限的非负整数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值