复习c语言:指针

c语言是大一最开始接触的一门语言,也是自己学过后用的最少的语言。除了在大一下用过一段时间开发了一个很简陋的课程设计和用来学习了一些数据结构外就没用太多的使用了。由于这次实习将要学习的是ios开发,大概是要用object-c。因此想来有必要去复习下c语言的一些基础知识。

C语言在我的认识里面,是相当底层的语言,因此对于计算机相关的处理要很熟悉。指针正是C/C++的一个特色。因此我第一个复习的重点就是指针。

1.指针类型

int p; //这是一个普通的整型变量

int *p; //一个整形指针。

int p[3]; //一个整形数组

int p[3]; //一个整形指针数组。P先和[]结合,在与结合

int (p)[3]; //一个数组指针。()将p与先结合。

int **p; //二级指针。指针指向的内存中存放的一个一级指针的地址

int p(int); //一个返回类型为int,参数为int形参的p函数

int (*p)(int); //P是一个指向有一个整型参数且返回类型为整型的函数的指针

2.对指针的一点理解

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

指针有四个重要的属性:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

指针的类型:把声明中的指针名字,剩下的部分就是这个指针的类型

指针所指向的类型:把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。在指针的运算中,指针指向的类型是很重要的。

指针所指向的内存区:从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。(一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址)

指针本身所占据的内存区:用函数sizeof(指针的类型)可以测出指针本身所占据的内存区(在 32位平台里,指针本身占据了 4个字节的长度)

3.指针的算术运算

指针和整数进行加减:一个指针 加(减)一个整数 n后,产生一个新的指针。新的指针指向的内存为旧指针指向的地址+n*指针类型的内存大小

指针和指针进行加减:两个指针不能进行加法运算,这是非法操作;两个指针可以进行减法操作,但必须类型相同,一般用在数组方面。

  1. 运算符&和*

&是取地址运算符,*是间接运算符。

&a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。

*可以看作钥匙。*p就是取p中地址存储的数据

  1. 数组和指针的关系

数组的数组名其实可以看作一个指针。

声明了一个数组 TYPE array[n],则数组名称array就有了两重含义:

第一,它代表整个数组,它的类型是 TYPE[n];

第二 ,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是 TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。该指针的值是不能修改的,即类似 array++的表达式是错误的。

数组和指针并不相同。

如存在a[10],要区别*p=a和*p=&a

*p=a 是将数组的第一个a[0]的地址赋予指针。而*p=&a则是将数组a的首地址赋予指针。两者在值上面相同,但是意义不同,用法也不一样。

你可能感兴趣的:(个人思考,C-C++,c语言)