C语言指针入门(一)

前言:大家好,我是老老老老颓。在初学C语言之时,我们辅导员告诉我们,学好指针才能体现出科班生与“野路子”的差距。今天,我就带大家初步地了解一下指针和一些学习的方法。

一、什么是指针?

  指针是C语言的重要概念,是C语言最灵活分部分,但同时也是C语言学习中的一个难点,如果我们能学好指针也便是掌握了c语言的精华。

  指针的概念:指针与内存有着密切的联系,而要弄清楚计算机系统中数据存储和读取的方式就需要分清三个较为相近的概念:名称、地址、和内容(值)。名称是给内存空间取的一个容易记忆的名字;内存中每个字节都有在地址所对应的内存单元中存放的数值即为内容或值。在计算在存储器中的。一般把存储器中的一个字节称为一个内存单元内存单元数不等,若在程序中定义了变量,在对程序进行编译配与变量类型相符合的相应长度空间的内存单元。要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。
酒店房间的门牌号(地址)酒店房间里的人(内容)酒店房间的名字有比如总统套房,商务房(名称)


 我们找一个酒店里的房间,既可以按它的名字(名称)找,也可以按它的房间号(地址)找。

类似地,对于一个储存空间的访问既可以指出它的名称也可指出它的地址。

二、指针变量

1.指针变量的定义

C语言规定,所有的变量在使用之前都要进行定义,指定其类型,并按此分配单元。但指针变量不同与,我们之前所学到的int、char等变量,指针变量专门用于存放地址。这个地址不仅可以是变量的地址,也可以是数据结构的地址。所以我们在定义指针变量时应包含以下三个方面:

(1)指针类型说明,即定义变量为一个指针变量;

(2)指针变量名;

(3)指针值所指向的变量的数据类型;

其一般形式为:类型说明符*变量名;

注:*表示这是一个变量;变量名即定义的指针变量名;类型说明符表示本指针变量所指向的变量的数据类型。

eg:

 至于p0究竟是指向哪一个整型变量,应由p0赋予的值来决定。

eg:

#include<stdio.h>
int main()
{
	int*p0;//表示p0是一个指针变量,它的值是某个整型变量的地址,或者说p0指向一个整型变量。
	int*p1;
	float*p2;
	char*p3; 
 } 

如上:不同类型的变量可存放不同类型的指针的地址。

注:以上的指针变量名为p0,p1,p2,p3,而不是*p0,*p1,*p2,*p3!!!

2.指针变量赋值
同其他普通变量一样,指针变量在使用之前不仅要定义说明还要具体地赋值,否则会造成系统的混乱,甚至死机。在赋值即初始化时,也可以赋值“NULL”或“0”,如果赋值“0”,此时的“0”含义并不是数字“0”,而是 NULL 的字符码值。

假设有指向整型变量的指针变量p,若要把整型变量a的地址赋值给p,有以下两种方法:

(1)指针变量初始化的方式

int a;
int*p=&a;

(2)赋值语句的方式

int a;
int*p;
p=&a;

以上两种方式都把变量a的地址给到了指针变量p中,这时p就指向了变量a。但也有所区别;

取地址运算符&:单目运算符&是用来取操作对象的地址。例:&i 为取变量 i 的地址。对于常量表达式、寄存器变量不能取地址(因为它们存储在存储器中,没有地址)。
指针运算符*(间接寻址符):与&为逆运算,作用是通过操作对象的地址,获取存储的内容。例:x = &i,x 为 i 的地址,*x 则为通过 i 的地址,获取 i 的内容。

1.在指针变量的初始化中,不允许直接把一个数赋予指针变量,如下:

int*p;//定义
p=100;

这是错误的!

2.赋值的指针变量前不能再加“*”说明符;

*p=&a

这是错误的!

3.指针的类型和指针所指向的类型

只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看下面中各个指针的类型:
(1)int*p;//指针的类型是int*
(2)char*p;//指针的类型是char*
(3)int**p;//指针的类型是int**
(4)int(*p)[3];//指针的类型是int(*)[3]
(5)int*(*p)[4];//指针的类型是int*(*)[4]

什么是指针的指向型呢?

(1)int*p; //指针所指向的类型是int
(2)char*p; //指针所指向的的类型是char
(3)int**p; //指针所指向的的类型是int*
(4)int(*p)[3]; //指针所指向的的类型是int()[3]
(5)int*(*p)[4]; //指针所指向的的类型是int*()[4]

指针的类型和其指向的类型是有所区别的,在学习的过程中我们一定要认真区分。

今天的知识就分享到这里,最后留一道简单的题目:使用指针访问数组元素。

eg

#include <stdio.h>
int main()
{
int data[5], i;
   printf("输入元素: ");
 
   for(i = 0; i < 5; ++i)
scanf("%d", data + i);
 
   printf("你输入的是: \n");
   for(i = 0; i < 5; ++i)
printf("%d\n", *(data + i));
 
   return 0;
}

关于指针的知识接下来也会为打家持续分享。

(菜鸟新人,不喜勿喷)
 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值