[C/C++学习]指针一些事
[cpp]
#include<iostream>
using namespace std;
int main(void)
{
/***********************************************************
指针,内存地址,指针取值,指针是啥
指针是一个存储计算机内存地址的变量。 这里引用是计算机内存地址。
从指针指向的内存读取数据叫:指针取值。
指针可以为void类型,也可以是其他的内置数据类型等。
也有NULL指针和未初始化指针。
“*”操作符可以用来声明一个指针变量,也可以是解引用操作符,当然也可以是
乘法操作符。
“&”是地址操作符。 通过在变量前加上&我们可以得到这个变量的地址
***********************************************************/
int *ptr; //声明一个int类型的指针
int value = 1;//声明一个int类型的值,值为1
ptr = &value;//给指针分配一个int类型的值的引用
int *p = ptr;//对指针进行取值,这里可以直接获得指针指向的内存地址中的数据
cout << p << endl;
/******************************************************************
类比一下,指针比作信封 引用比作邮箱 值比作房子
ok,我们在信封上面写上邮寄的地址(引用地址), 我们来取值就相当于地址
对应的房子。我们也可以把信封上的地址涂掉,然后写上其他的我们想要的地址
房子是在哪里不动的,所以不受影响。
*******************************************************************/
/*********************************************************************
下面是void指针 NULL指针 未初始化指针
*********************************************************************/
int *ptrs;//未初始化
int *ptring = NULL;//NULL指针
void *vptr;//void指针 未初始化
int *iptr;
int *vastptr;
//void类型可以存储任意类型的指针或者引用
iptr = &value;
vptr = &value;
cout << iptr << vptr << endl;
//显示类型转换 把一个void指针转换成int指针,并取值。
vastptr = static_cast<int*>(vptr); //(int*)vptr;
cout << *vastptr << endl;
//cout << ptrs << ptring << endl;
/******************************************************************
要知道,未初始化的指针也是有内存地址的,但是是一个垃圾地址。
所以我们不能对未初始化的指针取值。
最好的情况是你去到的是垃圾地址,接下来你需要对程序进行调试
最坏情况就会导致程序崩溃。
*******************************************************************/
/********************************************************************
数组是一断连续的内存空间,来存储多个特定类型的对象。
指针用来存储单个内存地址
所以数组和指针不是相同的结构,不能互相转换。
数组变量是一个常量,就算指针变量指向相同的地址或者一个不同的数组,
也不能把指针赋值给数组变量。
我们可以把数组变量赋值给指针时,世界上把指向数组第一个元素的地址赋值给指针。
要注意的是:指针需要和数组元素类型保持一致,除非指针是void类型。
********************************************************************/
int myarray[4] = {1, 2, 3, 0};
int *ptrarray = myarray;//*ptrarray = &myarray[0];
cout << *ptr << endl;
//ok上面的操作时正确的。来看下面的错误
//myarray = ptrarray;
//myarray = myarrays;
//myarray = &myarrays[0];
/*******************************************************************
结构体和指针。 与数组类似,指向结构体的指针存储了结构体第一个元素的
内存地址。 结构体的指针必须声明和结构体类型保持一致 或者为void
*******************************************************************/
struct person{
int age;
char *name;
};
struct person first;
struct person *ptrstruct;
first.age = 22;
char *fullname = "full name";
first.name = fullname;
ptrstruct = &first;
cout << first.age << ptrstruct->name << endl;
return 0;
}
看运行结果:
2012/9/27
&nbs
补充:软件开发 , C++ ,