指针数组:数组 指针 存贮

字符用byte,整数用word,指针用于地址,函数用于对程序的抽象。
数组和指针(Arrays and Pointers)
在C中,一个数组只是一片存储区域。例如:
int v[10];  // 10个int型变量的数组
v[3] = 1; // 将1赋值给v[3]
int x = v[3]; // 从v[3]读取元素值
表示下标的标记 [] 用在声明中,表示声明的对象是数组;用在表达式中,表示数组的元素。
一个C语言中的指针是指一个变量,它存放着某个存储位置的地址。例如:
int* p; // p是一个指向int型对象的指针
p = &v[7]; // 将v[7]的地址赋给p
*p = 4; // 通过p来向v[7]写入数据
int y = *p; // 通过p来读取v[7]的数据
  
  指针的提领(dereference,“指向”的意思)标记 * 用在声明中,表示声明的对象是指针;用在表达式中,表示取指针所指向的那个元素。
例如,我们可以像下面这样写一个函数,其功能是在vector里查找一个元素并返回一个指向匹配元素的指针:
int* find(int v[], int vsize, int val) //在v中查找val
{
for(int i = 0; i < vsize; i++) //从0到vsize-1的循环
if (v == val) return &v; //如果找到val,就返回指向元素的指针
return &v[vsize]; //如果没找到,就返回v末端元素的指针
}
存贮(Storage)
在C和C++中,有三种使用存储区的基本方式:
l[静态存储区(Static Memory)]
在静态存储区中,连接器(linker)根据程序的需求为对象分配空间。全局变量、静态类成员以及函数中的静态变量都被分配在该区域中。一个在该区域中分配的对象只被构造一次,其生存期一直维持到程序结束。在程序运行的时候其中的地址是固定不变的。在使用线程(thread,共享地址空间的并发物)的程序里,静态对象可能会引起一些问题,因为这时的静态对象是被共享的,要对其正常访问就需要进行锁定操作。
l[自动存储区(Automatic Memory)]
函数的参数和局部变量被分配在此。对同一个函数或区块的每一处调用,其在该区域内都有自己单独的位置。这种存储被自动创建和销毁;因而才叫做“自动存储区”。自动存储区也被称为是“在栈上的(be on the stack)”。
l[自由存储区(Free Store)]
在该区域中,程序必须明确的为对象申请空间,并可以在使用完毕之后释放申请到的空间(使用new和delete运算符)。当程序需要其中更多的空间时,就使用new向操作系统提出申请。通常情况下,自由存储区(也被称作动态存储区或者堆(heap))在一个程序的生存期内是不断增大的,因为其间被其它程序占用的空间从来都不被归还给操作系统。例如:
int g = 7; //全局变量,分配在静态存储区中
void f()
{
int loc = 9;
Tags:  指针和数组的区别 指向数组的指针 函数指针数组 指针数组

延伸阅读

最新评论

发表评论