前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言编程精华——《指针》

C语言编程精华——《指针》

作者头像
企鹅号小编
发布2017-12-27 16:05:31
9.3K0
发布2017-12-27 16:05:31
举报
文章被收录于专栏:编程

C语言编程精华--《指针》

使用指针有两方面的优势:

1、用指针能够更好完成某些任务;

2、有些任务只能是用指针才能够完成。

一、指针定义

1、计算机的内存

计算机的内存(RAM)由数百万个或千万个顺序存储位置组成(具体有多少个存储位置是由内存容量决定),每个内存位置都有唯一的地址。计算机内存地址范围从0开始到最大值(取决于内存的数量)。

例如:int x=360;

当程序使用该变量名时,将自动访问正确的内存位置。虽然程序使用了该位置的地址,但是对我们用户来讲它是隐藏,你也不需要关心这个问题。

2、如何创建指针

注意:x变量或任何其他变量的地址都是一个数字(类似于C语言的其他数字)。假设大家知识一个变量的地址,我们应该如何去创建第2个变量来存储第一个变量的地址。

int x=360;

第一步:先声明一个变量存储x变量的地址。

int *p_x=NULL;

第二步:把x变量的地址存储到p_x变量中。

p_x=&x;

工程案例:

// PointerTest.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#define P_NULL NULL

int _tmain(int argc, _TCHAR* argv[])

{

int x = 360; // 声明变量x,且初始化值360

printf("x的地址:%d ",&x);

int *p_x = P_NULL;

printf("p_x的值:%d ",p_x);

p_x=&x;

return 0;

}

3、声明指针

指针是一个数值变量,和所有变量类似,必须先声明后使用。指针变量和普通变量命名规则基本相同,而且指针变量名必须唯一。大家只要按照遵循C语言的命名规范,就可以任意命名。

int *p_Man; // 没有结婚之前

const // 结婚

指针的声明形式:

类型名 *指针名;

类型名可以是任意C语言的变量类型,它指明该指针指向变量的类型。星号(*)间接运算符,表明指针名是一个指向类型名类型的指针,不是类型名类型的变量。

例如:

char *c1,*c2; // c1,c2都是指向char类型的指针

double *v1,v2; // v1是指向double类型变量的指针,v2是普通的double类型变量

注意:

*号可用作间接运算符和乘法运算符。

4、初始化指针

没有存储变量地址的指针是没用的。变量的地址不会自动(变)进指针中,必须在程序使用取地址运算符(&)获得变量的地址,然后将其存入指针当中才可以。把取地址运算符放在变量名前,便会该变量的地址。

初始化指针:

指针 = &变量;

v1=&v2;

5、使用指针

现在大家学会声明和初始化指针之后,如何使用指针,又要用到间接运算符(*)。把*放在指针名前,该 指针引用它所指向的变量。

实例:

// PointerTest.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#define P_NULL NULL

int _tmain(int argc, _TCHAR* argv[])

{

int x = 360; // 声明变量x,且初始化值360

printf("x的地址:%d ",&x);

int *p_x = P_NULL;

printf("p_x的值:%d ",p_x);

p_x=&x;

// 输出时加*号,指的是p_x指针变量指向x变量的地址里面的值360

printf("p_x存储x地址里面的值:%d ",*p_x);

return 0;

}

二、指针用途

1、指针和数组

A、数组名

数组名(不带方括号)是指向数组第一个元素(即,首元素)的指针。比如你声明一个数组int a[];那么a中存储的是数组第1个元素的地址。

案例:

// ArrSoft.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

int _tmain(int argc, _TCHAR* argv[])

{

double a[20];

// 数组下标从0开始 ,数组就是首地址,数组存储空间是连续,数组存储是同类型数据

for (int i = 0; i

{

printf("数组a[%2d]的地址为:%d ",i,&a[i]);

}

return 0;

}

B、存储数组元素(暂时不讲)

C、指针算术(指针递增、指针递减)(暂时不讲,同学们的要求)

三、如何将指针应用到(数组、函数、结构体、链表等)(暂时不讲,同学们的要求)

1、C编程内存越界和内存监测技术

按照刚才图形结构设计思路,首选要你要构建一个接口文件:Interface.h

四、工程案例(计算机内存监控系统)

本文来自企鹅号 - 程序员港湾媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 程序员港湾媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档