[c/c++]指针(1)

  指针算是一种特殊的变量,它存储的是一个内存地址,你既可以通过它来给制定内存地址赋值

(可能会被操作系统收回或者与其它程序冲突),又可以提高运行速度


First Step:

声明一个指针变量

1 int* a;
2 char* pc;

貌似只用在变量后面加一个*就行了

那这又有什么区别:

int *c;
int* d;

虽然这样没有什么区别,

但是,这样的话,编译器看起来就不一样了:

int* c,d;

这就等价于:

int* c;
int d;

是不是发现了什么不对的地方,可是编译器确实会把d当成int类型

不如用这段代码看看编译器会不会报错

int *c = 0x0700;        //温馨提示:不要指望不会运行出错
int* a = c,b = c;

到了这里,你就完成指针的声明


Then:

给一个指针赋值:

int* c = ( int * ) 0x07fa6dbc;
char* d = ( char * ) 0x03a3421;

是的,没有错,第一种就这么简单,就像这么强转一下就行了,所有指针类型都可以强转,因为

你可以把它们都看成特殊的int类型

还有其它的方法:

1 int a = 123;
2 int* pa = &a;

把a的地址赋给pa,是不是还是很简单?

那恭喜,又完成了一步


Then:

访问指针指向的数据:

int c = 233;
int* a = &c;
cout<<*a;

就只需要加个*就行了,不过这时就要和之前什么XX*有关系了

XX代表的是指针指向的数据的类型

如果与这个数据不符,访问时就要小心程序duang的一声崩了


THE END:

在这是不是还没有体会到指针的用途,还可用相关函数或运算符开辟内存空间

比如:

int* a = new int;
*a = 233;

如果没有‘=’后面的内容的话,可能赋值的时候与其他内存冲突,就。。。(请自行脑补)

new是c++的关键字,那玩c的同学怎么办?

别着急额,在<malloc.h>头文件中有个函数void* malloc(size_t)可以分配内存

size_t是开辟的空间的大小(单位字节)

返回时开辟的内存的首地址,对于各种指针,只需要强转一次就好了

#include<malloc.h>
......
int main(int argc,char* argv[]){
    int* c = ( int * )malloc(sizeof(int)*100);
    ......
    return 0;
}

(第一部分,完)

posted @ 2016-07-11 21:42  阿波罗2003  阅读(...)  评论(...编辑  收藏