C++课程上 有关“指针” 的小结

上完了C++的第二节课以后,觉得应该对这个内容进行一个小结,巩固知识点,并对我的心情进行了一个侧面烘托...

开始上课的老师:

正在上课的我:

上去敲代码的我:

过程是这样的:

下来的我:

非常的尴尬,简直是黑历史= =

变量:

变量有整形变量,浮点型变量,字符型变量,当然还有指针变量。对于32位操作系统而言,为字符型变量分配的内存单元是一个字节,整型是两个字节,单精度浮点型变量为四个,双精度浮点型变量为八个字节,今天要阐述的指针变量是四个字节。

指针变量所存储的是地址。

int a;
int *pa;
pa = &a; //将整形变量a的地址赋值给整型指针pa

经过上面代码的处理以后,指针pa指向变量a。

指针变量的定义:

int *ptr1;
float *ptr2;
char *ptr3;
void *ptr;

指针变量的赋值:

int *ptr,a = 4;
ptr = &a; //将变量a的地址赋值给指针变量ptr

经过上面语句的处理以后,整形指针指向整形变量a。原来以为整形指针和整形变量放在一起定义编译会出错,学习了:int *ptr,a=4;

指针变量的引用:

(1)

int main()
{
    int *p,m;
    scanf("%d",&m);
    p = &m; //指针p指向m
    printf("%d\n",*p);
    return 0;
}

这段程序比较简单,没有什么问题。

(2)

int main()
{
    int *p,m;
    p = &m;
    scanf("%d",p);
    printf("%d\n",m);
    return 0;
}

我:“???”
回来以后自己试了下,弄懂了这个内容,就是把之前输入的scanf中的&m替换为p。这里摘取一段C++中文网介绍scanf的说明。

例如:&a、&b分别表示变量a和变量b的地址。

这个地址就是编译系统在内存中给a、b变量分配的地址。在C语言中,使用了地址这个概念,这是与其它语言不同的。 应该把变量的值和变量的地址这两个不同的概念区别开来。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。

(3)

int main()
{
    int *p,m;
    scanf("%d",p);
    p = &m;
    printf("%d\n",m);
    return 0;
}

“这不行吧???”
确实是不行的,程序崩溃。原因是因为其不安全性。

指针:

指针是一种特殊的变量,它存储的数值是内存中的一个地址。
1.指针的类型
2.指针所指向的类型
3.指针的值 或者 指针所指向的内存区
4.指针本身所占据的内存区

指针的类型和指针所指向的类型:

1.指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。
2.只需把指针声明语句里的指针名字和名字左边的指针声明符*去掉,剩下的部分就是这个指针所指向的类型。
int *ptr; //整形 指针
char *ptr; //字符型 指针
int* *ptr; //整形指针 的 指针

int (*ptr)[3]; //指向含三个整形元素的整形数组 的 指针
int* (*ptr)[4]; //指向含四个整形指针的指针数组(array of pointers) 的 指针 

这里注意“数组 指针”(a pointer to an array)和“指针 数组”(array of pointers)的区别,参考资料:指针数组和数组指针的区别

void 指针

int main()
{
    int m = 5;
    void *ptr;
    ptr = &m;
    printf("%d\n",*ptr);
    return 0;
}

编译错误。

“void型指针,表示这个指针指向的内存中的数据的类型要由用户来指定。
比如内存分配函数malloc函数返回的指针就是void *型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据
(int *)malloc(1024)表示强制规定malloc返回的void*指针指向的内存中存放的是一个个的int型数据。”

指针的值:指针所指向的内存区。

指针本身所占据的内存区:

可以使用sizeof(指针类型),对于32位操作系统来说,系统为指针变量分配4个字节的长度。

char *np;

1. sizeof(char) // 1
2. sizeof(*np) //4
3. sizeof(char *) //4
4. sizeof(char *p) //compiling error
posted @ 2016-05-07 20:27  Wasdns  阅读(282)  评论(2编辑  收藏  举报