C语言指针知识点

指针的基本概念和常见用法

*  为指针标识符。 如:*p

格式:datatype *name = value;  //定义格式

int *p;                    //定义,定义时必须带* 。

 

float *p1 &a;

char *p2 &c;

p1 &b;

p2 &d;                     //赋值,在定义的同时赋值需要带*,单独赋值时不能带*,因为P代表指针变量的值,即地址。*P代表指针指针变量指向的变量的值。

//P1等同于&a, &p1等同于a

//通过指针变量可以获取内存上的数据,也可以修改内存上的数据(P=&a;*p=b;)

//*p 代表的是 a 中的数据,它等价于 a,可以将另外的一份数据赋值给它,也可以将它赋值给另外的一个变量。

*在不同的场景下有不同的作用:

*可以用在指针变量的定义中,表明这是一个指针变量,以和普通变量区分开;

使用指针变量时在前面加*表示获取指针指向的数据,或者说表示的是指针指向的数据本身。

//在32位操作系统下都在0 ~ 4,294,967,295这个数区间内,所以:在32位操作系统下,任何类型的指针变量都占四个字节

---------------------------------------------------------------------------------------------------------------------------------------------

指针与数组

//数组和字符串的变量名实际上相当于其指针。在一定范围内可以认为是等同效果的,但其实质并不一样

int arr[] = { 99, 15, 100, 888, 252 };
int *= arr;

arr 本身就是一个指针,可以直接赋值给指针变量 p。arr 是数组第 0 个元素的地址,所以int *p = arr;也可以写作int *p = &arr[0];

也就是说,arr、p、&arr[0]                                        这三种写法都是等价的,它们都指向数组第 0 个元素,或者说指向数组的开头。

“arr 本身就是一个指针”这种表述并不准确,严格来说应该是“arr 被转换成了一个指针”

区别:指针是一个变量,可以进行数值运算。数组名不是变量,不可以进行数值运算。

数组指针指向的是数组中的一个具体元素(首地址),而不是整个数组,所以数组指针的类型和数组元素的类型有关,上面的例子中,p 指向的数组元素是 int 类型,所以 p 的类型必须也是int *

 

指针的优势:

指针可以直接修改指定变量的值,而不用通过函数来修改!

posted @ 2019-08-23 17:21  狗狗王  阅读(1127)  评论(0编辑  收藏  举报