0%

栈是一种数据结构,其特点是后进先出(LIFO).计算机中有很多操作都采用了栈的数据结构,如浏览器的后退,文本编辑的撤销操作等.

栈的定义

阅读全文 »

通过前面的学习,已知:

int arr[3]={1,3,5};
arr[0] 可以用 *(arr+0) 表示
arr[1] 可以用 *(arr+1) 表示
arr[2] 可以用 *(arr+2) 表示

现有二维数组如下:

阅读全文 »

今天下午把启动了一周的项目重构了一下,用storyboard做界面(之前是代码+xib),block做回调(之前是delegate)。

关于storyboard和block都已经出现好几个年头了,从开发效率上来看,这俩东西再配合ARC上简直是倚天屠龙。

在之前的项目中,回调需要做以下几步:

阅读全文 »

函数指针和类成员指针经常被用作参数进行传递,多态和函数重载都会用到.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class Demo {
public:
void show() {
cout << "member method Demo::show() did call" << endl;
str = "str from Demo::show()";
}
string str;
};
void show() {
cout<<"普通函数指针被调用"<<endl;
}
int main(int argc, char* argv[]) {
//普通函数指针
//将普通函数show的地址赋值给pPainShow,优先级原因,必须在(*pPainShow)外加小括号,
//否则编译器会将此认为是一个void* pPainShow(); 的函数声明,显然,我们不是这个意思.^_^
void (*pPainShow)() = &show;
(*pPainShow)();

//指向类成员变量的指针
//将Demo::str的地址赋值给 pStr指针
string Demo::*pStr = &Demo::str;

//指向类成员方法的指针
//将Demo::show的地址赋值给pShow,此处因为优先级问题,必须在Demo::*pShow外加小括号.
void (Demo::*pShow)(/*参数列表...*/)=&Demo::show;
Demo *d=new Demo;
Demo dd;
cout<<"准备通过指向成员函数的指针调用函数"<<endl;
(d->*pShow)();
(dd.*pShow)();
cout<<"准备通过指向成员变量的指针访问变量"<<endl;
cout<<d->*pStr<<endl;
cout<<dd.*pStr<<endl;
}

这一概念经常混淆,故写下来,以备不时之需

1
2
3
4
5
6
7
8
int a = 10;
int * const b = &a;//const修饰b,b本身不可变,但是*b可变;人称常量指针,即指针是常量,地址不可改变
*b = 20;//更换值
cout << *b << endl;
int const * bb = &a;//const修饰*bb,*bb不可变,但是bb可变;人称指针常量,指向常量的指针,值不可以变,地址可以改变
int c = 30;
bb = &c;//更换指向
cout << *bb << endl;