C语言指针入门学习、概念梳理(一)

C语言指针入门学习、概念梳理(一)

C语言指针入门学习、概念梳理(二)

指针的重要性不言而喻,是C语言的核心内容之,不过忘得差不多了,最近因个人发展原因开始重拾C语言知识,现将郝斌老师视频学习笔记整理成博文,方便日后复盘巩固,能力有限,若有不足之处,还望各位指正。

C语言指针学习(一)

指针用法简单介绍

首先,搞清楚指针是什么? -------指针就是个地址,指针和地址是一个概念

那地址又是什么? ----- 地址就是内存单元的编号

以内存条为例,里面分很多小单元,其中一个单元有八位(存放8个0或8个1),也就是说内存的编号是以字节来算的,而不是位。不是一个0/1为一个编号,而是8个0/1作为一个编号如1000 0010为一个编号,即一个字节,该编号即为地址。

  1. 程序示例1
# include 
int main(void)
{
  int * p;    //p是变量的名字,int * 表示p变量存放的是int类型变量的地址,p只能存放整形变量地址。
  int i = 3;  // i是整形变量,但P = i;是非法的   P = &i;才合法,&i为取整形变量i的地址,并将其放到指针变量p中
  p = &i;     //ok  
//p = i;      //error,类型不一致,p只能存放int型变量的地址,不能存放int类型变量的值
//p = 55;     //error,理由同上一行
  return 0;
}

若以上程序中int * p改为 double * p, 即指针变量p只能存放双精度类型变量地址,此时 p = &i 就是错误的。

  1. 程序示例2
# include 
int main(void)
{
 int * P;    //**p是变量的名字,int * 表示p变量存放的是int类型变量的地址**,p只能存放整形变量地址。
 int i = 3;
 p = &i;
 return 0;
}

如何理解 p = & i;

  1. p保存了i的地址,因此p指向i
  2. p不是i ,i也不是p,或者说修改p的值不影响i的值,修改i的值也不影响p的值,这是两个变量
  3. p本来是个普通变量,只能存放整数。只不过前面加上*号后成了存放整型变量的地址,即此时p为指针变量。
  4. 如果一个指针变量指向了某个普通变量,则 *指针变量 完全等同于 普通变量 即 *p 等同于 i

举例:如果p是个指针变量,并且存放了普通变量i的地址,则p指向普通变量 i, p就完全等同于 i
或者说:在所有出现
p的地方都可以替换成 i,在所有出现 i 的地方都可以替换成 *p

要真正理解指针,还需要搞清楚*,*p, p,&p的含义,两个星号意义不同。 p = &i ; *p = i (内容相同);

int * p;  //本行为声明,此时p是变量名,int * 是数据类型,*告诉你p是一个指针变量,只能存放整型变量地址,
          //勿理解为* p是一个变量,所以才有 p = &__的格式限制,下划线处为整型变量i
          //int * p;不表示定义了一个名字叫*p的变量,而是表示p是变量名,p变量的数据类型是int * 类型
          //int * 类型,实际就是存放int变量地址的类型
 j = *p;  //*是指针运算符,为&的逆运算,可以取出指针变量指向的地址中存放的值

*p也可以通俗得理解成取快递:

查看取货码(p = &i):1123 (&i取地址),也就是获取包裹在驿站中所对应的地址(1楼1货架第2层第3个包裹)
取出包裹(*p):星号为取出所指向地址中的值

# include 
int main(void)
{
 int * P;    //**p是变量的名字,int * 表示p变量存放的是int类型变量的地址**,p只能存放整形变量地址。
 int i = 3;
 int j;
 p = &i;
 j = *p;  //等同于j=i; 因为*p等同于i, *p代表以p的变量内容为地址的一个变量,即以i的地址为地址的变量,就是i
 printf("i = %d,j = %d/n",i,j)
 return 0;
}

结果: i = 3, j = 3

指针和指针变量的区别

  1. 指针就是地址,地址就是指针
  2. 地址就是内存单元的编号
  3. 指针=地址=存放地址的编号
  4. 整形变量是用来存放整数的变量,指针变量是用来存放地址(指针)的变量。(即指针为水,指针变量为杯子)
  5. 指针是内存地址,而指针变量是保存内存地址的一个普通变量
  6. p是指针变量,本身也是变量,自身存放的地址叫指针。
  7. 指针变量是一个变量,任何一个相同类型的变量地址都可以给它赋值,一旦赋值,指针就确认了,即内存单元编号就确定了
  8. 指针和指针变量是两个不同的概念,但注意:通常我们叙述时会把指针变量简称为指针,实际含义并不一样

小结:指针就是地址(即&i代表指针),指针变量是变量(p是指针变量),指针变量则是存放"地址值"的变量,也可以表述为:指针变量是“存放变量”所占内存空间“首地址”的变量 (一个变量通常要占用连续多个字节空间)。

C语言指针入门学习、概念梳理(二)

你可能感兴趣的:(C/C++,c语言,c++,指针,C语言指针)