c语言指针相关知识,C语言指针基础知识总结

1.什么是指针、引用和取值

指针是一个存储计算机内存地址的变量,即指针变量里面存放的是内存地址。在本文中的“引用”表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。

说到指针,不得不提两个操作符:*和&。

操作符*根据出现的位置不同,既可以用来声明一个指针变量,也可以用作指针的取值。当用在声明一个变量时,*表示这里声明了一个指针。其它情况用到*表示指针的取值。

&是地址操作符,用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量的内存地址。

指针是一个存储计算机内存地址的变量。在本文中的“引用”表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。

说到指针,不得不提两个操作符:*和&。

操作符*根据出现的位置不同,既可以用来声明一个指针变量,也可以用作指针的取值。当用在声明一个变量时,*表示这里声明了一个指针。其它情况用到*表示指针的取值。

&是地址操作符,用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量的内存地址。

int *ptr; // 声明一个int指针

int val = 1; // 声明一个int值

ptr = &val; // 为指针分配一个int值的引用

int deref = *ptr; // 对指针进行取值,打印存储在指针地址中的内容

printf("%d\n", deref); //输出结果为1

2.指针、引用和变量值之间的关系

这里可以把指针、引用和值的关系类比为信封、邮箱地址和房子。一个指针就好像是一个信封,我们可以在上面填写邮寄地址。一个引用(地址)就像是一个邮件地址,它是实际的地址。取值就像是地址对应的房子。我们可以把信封上的地址擦掉,写上另外一个我们想要的地址,但这个行为对房子没有任何影响。

3.指针和数组的关系

C语言的数组表示一段连续的内存空间,用来存储多个特定类型的对象。与之相反,指针用来存储单个内存地址。数组和指针不是同一种结构因此不可以互相转换。而数组变量指向了数组的第一个元素的内存地址。

一个数组变量是一个常量。即使指针变量指向同样的地址或者一个不同的数组,也不能把指针赋值给数组变量。也不可以将一个数组变量赋值给另一个数组。然而,可以把一个数组变量赋值给指针,这一点似乎让人感到费解。把数组变量赋值给指针时,实际上是把数组第一个元素的地址赋给指针。

int myarray[4] = {1,2,3,0};

int *ptr = myarray;

printf("*ptr=%d\n", *ptr);

// 数组变量是常量,不能做下面的赋值

// myarray = ptr

// myarray = myarray2

// myarray = &myarray2[0]

其中,int *ptr = myarray这句话与int *ptr = &myarray[0]效果相同,都是表明将数组的第一个元素地址赋值到了ptr指针。

三、总结

c语言的指针应该是c语言的重中之重,也是程序员进阶的必经之路。虽然存在着无需使用指针的java语言,但是就目前的形势来看,c语言还是无法替代的,所以学好指针还是很有必要的。而且在Github或overflow等开源网站上看到的很多国外大牛写的代码,都是将指针和引用运用到出神入化的程度,从而使代码十分简洁,我们想要从人家的代码中学到东西,指针也是必须要精通的知识。

希望这份简短的基础知识总结能够有助于大家学习指针。在后续的博文中我们还会探讨其它类型的指针,比如函数指针的用法。

你可能感兴趣的:(c语言指针相关知识)