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

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

指针是什么

指针有什么用

指针怎么用

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

这里写图片描述

地址总线 :找到cpu所想操作内存单元在那里

控制总线 :对cpu数据进行操作

数据总线 :传输数据

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

那使用指针有什么用?

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

例如定义链表LinkList这种数据结构,数据结构关注三个方面

逻辑结构

存储结构

运算

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

typedef struct node

{

datatype data;

struct node *next;

} LNode;

这里写图片描述

这里写图片描述

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语言使用node类型指针,C语言学习--指针认识