C语言学习--指针认识

C语言中指针是最灵活,也最难掌握的东西,以前不知道指针究竟是什么,后来学习汇编后,慢慢理解了指针。

学习指针主要解决三个问题

  • 指针是什么
  • 指针有什么用
  • 指针怎么用

先说几个概念,首先要明白,cpu在处理数据的也要解决三个问题,数据在哪里,对数据进行怎样的操作(读或写),怎么传数据。所以在计算机里面cpu和内存之间有三种线来解决这三个问题

C语言学习--指针认识_第1张图片
这里写图片描述

地址总线 :找到cpu所想操作内存单元在那里
控制总线 :对cpu数据进行操作
数据总线 :传输数据

内存除了存储整形,浮点型数据之外,内存还可以存地址。那么我们就可以知道指针是什么了,指针就是存放地址值的变量,也就是说指针也是需要占用内存的。

那使用指针有什么用?

1.数据结构实现就需要指针来实现

例如定义链表LinkList这种数据结构,数据结构关注三个方面
逻辑结构
存储结构
运算

LinkList中Link表示其存储结构,使用链式实现,List表示逻辑结构,线性,一对一的关系。既要Link也要List,那么C语言怎么表示,链表有结点构成,C语言定义节点NODE

typedef struct node
{ 
   datatype data;
   struct node *next;
} LNode;

C语言学习--指针认识_第2张图片
这里写图片描述
C语言学习--指针认识_第3张图片
这里写图片描述

2.指针可以让程序操作内存,灵活使用,使程序简洁,高效

指针怎么用

指针的操作

  • 赋值
  • 取值
  • 取指针地址
  • 与整数加减
  • 比较

写一个程序来认识指针

#include 
int main(void){
   int a;//变量名是变量a的地址
   int b;   
   int * p;  //指针是变量,其数值是地址 为什么要指定int类型的指针
   a=100;  //赋值,本质,根据a这个变量名寻址,然后把数值100,写入到已分配的内存单元
   p=&a;  // 指针赋值,&为取地址运算符,把a的值赋给p,  p就指向了a所指向的内存单元 ,   * 为取值符号
   printf("%p\n",main);  //函数名本质也是地址 
   printf("%d\n",a);
   printf("%p\n",&a);
   printf("%p\n",&b);
   printf("%p\n",p);  //p变量名 的就是 p的地址 
   printf("%p\n",&p);
   printf("%p\n",p+1);  //整数加给指针:整数都会指针所指类型的字节数相乘,然后结果加到指针的值上,减类似 
   printf("%d\n",*p);  //输出p指针所指的内存单元数据到屏幕   *p ,* 为取值符号 
   printf("%d\n",sizeof(p));
   printf("%d\n",sizeof(a));
   return 0;
}

屏幕输出

C语言学习--指针认识_第4张图片
这里写图片描述

你可能感兴趣的:(C语言学习--指针认识)