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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈树义

如何唯一确定一个 Java 类?

今天偶然想起之前和朋友讨论过的一个问题:如何唯一确定一个 Java 类?我相信大多数朋友遇到这个问题的回答都是:类的全路径呗。但事实上,唯一确定一个 Java ...

1573
来自专栏IT可乐

深入理解计算机系统(3.8)------数组分配和访问

  上一篇博客我们讲解了汇编语言中过程(函数)的调用实现。理解数据如何在调用者和被调用者之间传递,以及在被调用者当中局部变量内存的分配以及释放是最重要的。那么这...

19810
来自专栏python3

python字符串

1.    S.find(substr,[start,[end]])    返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1,st...

602
来自专栏黑白安全

关于PHP语言在内存中的分配(堆和栈的区别)

本文以PHP语言为例来分析计算机中各段存储区的区别,代码段、堆空间段、代码段、初始化静态常量段。

1602
来自专栏Python小屋

数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)

大概十五年前,曾经写过一个C语言版本的类似代码。核心思想是:在乘法竖式计算过程中,每次的进位实际上是可以超过一位的,虽然老师从来没有这么教过。 ? 这样的操作在...

3246
来自专栏AzMark

Python 学习之正则表达式「下」

re.sub(pattern, repl, string, count, flags=0) 与 re.subn(…) repl 用来替换的字符串,strin...

561
来自专栏吾爱乐享

java学习之数组元素排序,冒泡排序和选择排序

1064
来自专栏程序员互动联盟

【编程基础】C语言指针、引用和取值

什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量。“引用”表示计算机内存地址。从指针指向的内存读取数据称作指针的取值。指针可以...

3507
来自专栏和蔼的张星的图像处理专栏

684. 缺少的字符串分解到vector中借助find函数

先把两个字符串都分解到vector中,以空格为标志,然后在借助find函数来找出两个vector中不同的单词。

1123
来自专栏Java Edge

数据类型的转换

2727

扫码关注云+社区