黑马程序员————C语言指针

[黑马程序员]C语言指针初识 0x00 地址的概念在现实生活中,要去找到某一个人,需要先得到那个人所在地址,然后我们按照地址去找到这个人。在计算机系统的内部存储器中,拥有大量的存储单元(1个单元为1个字节),与现实世界一样,每一个存储单元有一个编号,这个编号就是存储单元的“地址”,每一个存储单元都有一个唯一的地址。 0x01 指针的作用 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points 阅读详情
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1,指针简介

    指针是C语言中非常重要的一种数据类型。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。

2,指针定义

    对指针变量的定义包括三个内容:
(1)指针类型说明,即定义变量为一个指针变量;
(2)指针变量名;
(3)变量值(指针)所指向的变量的数据类型。
    其一般形式为:类型说明符 *变量名;其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。
例如:

int *p;表示p是一个指向整型变量的指针。
char *q;表示q是一个指向字符变量的指针。

3,指针变量的声明和赋值

    指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,指针变量的赋值只能赋予地址,决不能赋予任何其它数据。
两个有关的运算符:
(1)&:取地址运算符。
(2)*:指针运算符。

    C语言中提供了地址运算符&来表示变量的地址。例如&a表示变量a的地址,&b表示变量b的地址。指向整型变量的指针变量p,如要把整型变量a的地址赋予p,可以有以下两种方式:
(1)初始化

int a;
int *p=&a;

(2)赋值语句

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

4,指针与数组

    一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。。一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的内存单元。一个数组元素的首地址也是指它所占有的几个内存单元的首地址。例如:

int a[10];
int *p;
p=&a[0];或者p=a;

C 语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。
(1)p+i 和a+i 就是a[i]的地址,或者说它们指向a数组的第i 个元素。
(2)*(p+i)或*(a+i)就是p+i 或a+i 所指向的数组元素,即a[i]。
(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。
引入指针变量后,就可以用两种方法来访问数组元素了。
综上,引用一个数组元素可以用:
(1)下标法,即用a[i]形式访问数组元素。在前面介绍数组时都是采用这种方法。
(2)指针法,即采用*(p+i)形式,用间接访问的方法来访问数组元素,其中a是数组名,p是指向数组的指针变量,其处值p=a。

5,指针与字符串

可以将字符串的首地址赋予指向字符类型的指针。
例如:

char *pc;
pc="C Language";
或用初始化赋值的方法写为:
char *pc="C Language";

以上并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。
因此在C语言中,可以用两种方法访问一个字符串。
(1)用字符数组存放一个字符串,然后输出该字符串。
(2)用字符串指针指向一个字符串。

例如:

#include <stdio.h>
int main()
{
char *ps="this is a book";
printf("%s\n",ps);
}

用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:

(1)字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
(2)对字符串指针方式

char *ps="C Language";

可以写为:

char *ps;ps="C Language";

而对数组方式:

static char st[]={"C Language"};

不能写为:

char st[20];
st={"C Language"};

6,指针与函数

1)函数指针变量。
     在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
    函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。
例如:

#include <stdio.h>
int max(int a,int b)
{
	if(a>b)return a;
	else return b;
}
int main()
{
	int max(int a,int b);
	int(*pmax)();
	int x,y,z;
	pmax=max;
	printf("input two numbers:\n");
	scanf("%d%d",&x,&y);
	z=(*pmax)(x,y);
	printf("maxmum=%d",z);
}

2)指针型函数
    所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
    定义指针型函数的一般形式为:

类型说明符 *函数名(形参表)
{
…… /*函数体*/
}

其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型

SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人 本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J 阅读详情

相关推荐

华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

m0_73659489的博客 6468

c语言 指针 p=i,C语言指针(上篇)

定义含 义int i;定义整型变量iint *pp为指向整型数据的指针变量int a[n];定义整型数组a,它有n个元素int *p[n];定义指针数组p,它由n个指向整型数据的指针元素组成int (*p)[n];p为指向含n个元素的一维数组的指针变量int f();f为带回整型函数值的函数int *p();p为带回一个指针的函数,该指针指向整型数据int...

weixin_34836906的博客 1616

基于Matlab_Simulink的控制系统建模与仿真实现.pdf.zip

基于Matlab_Simulink的控制系统建模与仿真实现.pdf

c语言-数组指针变量

指向数组的指针变量称为数组指针变量。     一个数组是由连续的一块内存单元组成的。     数组名就是这块连续内存单元的首地址。     一个数组也是由各个数组元素(下标变量)组成的。    每个数组元素按其类型不同占用几个连续的内存单元。    一个指针变量既可以指向一个数组,也可以指向一个数组元素。 一般形式: 类型说明符 *指针变量名。  有了指针可以用两种方法访问数组元素: 第一种方法为...

从大局到细节 2802

动态数组的java实现

package com.wuhongyu.array; public class Array&lt;E&gt; { private E[] data; private int size; // 构造函数,传入数组的容量capacity构造Array public Array(int capacity){ data = (E[])new Obje...

软软的博客 600

C语言,数组指针

数组指针,本身是一种指针——指向数组的指针 一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。一个数组元素的首地址也是指他所占有的几个内存单元的首地址。如果数组定义位int型,则指针变量也应为指向int型的指针变量,即数组类型与定义指针变量类型一致! int main(int argc, char* argv[]) { int a=10; int *pa=&a; char ch='w'; char *pc=&ch; double *d[5];

m0_64885430的博客 2178

指针和数组

一、指针与数组的关系  指向数组的指针变量称为数组指针变量一个数组是一块连续的内存单元组成的,数组名就是这块连续内存单元的首地址。一个数组元素的首地址就是指它所占有的几个内存单元的首地址。一个指针变量即可以指向一个数组,也可以指向一个数组元素,可把数组名或第一个元素的地址赋予它。如要使指针变量指向第 i 号元素,可以把 i 元素的首地址赋予它,或把数组名加 i 赋予它。  设有数组 a,指向

yanyanwenmeng的博客 1451

黑马程序员——C语言指针

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

zya7016322的专栏 629

黑马程序员-C语言指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 0.指针概念 指针分类:    (1)强指针:默认情况下,都是强指针(__strong)    (2)弱指针: __weak 修饰                     eg: __weak Person *p2 = p ; (p2就是个弱指针

wlwl363的专栏 607

黑马程序员-c语言指针总结

一、指针概述     1. 指针概念:          内存单元的编号叫做地址,我们根据内存单元的编号或者地址可以找到所需要的存储单元,我们把这个地址叫做指针。          对于一个内存单元来说,该内存单元的地址就是指针,其中存放的数据才是该内存单元的内容。     2. 使用指针的优点:         1)为函数提供调用和修改变量的灵活手段         2)让函数有多个

qq_30800557的博客 428

黑马程序员——C语言——指针

--android培训、java培训、ios学习型技术博客、期待与您交流!--------- 指针的基本概念: 内存单元的编号也叫做地址,既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址叫做指针。(对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。) 使用指针的好处: 1)为函数提供修改调用变量的灵活手段。 2)让函数有多个返回值。 3

LucienER的博客 517

黑马程序员———C语言———【指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- —————————————————————————————————————————————————————————————————— 一、指针 概念:内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址成为指针。 二、指针变量 1、概

雪碧i的博客 785

黑马程序员——C语言中的指针

一、指针变量的定义 1,定义的几种格式 先定义后赋值 简单取值 int a = 10; int *p; p = &a; printf(“%d”, *p); 简单改值 *p = 9; 定义的同时赋值 int a = 10; int *p = &a; 实现修改实参注意事项:1、一定要先定义后赋值,用完记得清空。2、%p输出指针里面存储的地址值。3、清空指针可以用 p = 0;或

u013231295的专栏 455

C语言------指针()

数组指针指向数组的指针变量       指向数组元素的指针:           一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。           一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的内存单元。           一个数组元素的首地址也是指它所占有的几个内存单元的首地址。           定义一个

huhanze的专栏 744

C语言指针与数组

C语言指针与数组数组指针通过指针引用数组元素用数组名作为函数参数 一个变量一个地址,一个数组包含若干个元素,每个数组元素都在内存中占用存储单元,他们有相应的地址。所谓数组指针,是指数组的其实地址,数组元素的指针是数组元素的地址。 数组指针 数组指针定义的一般形式如下: 存储类型 数据类型(*指针变量)[元素个数] 如: int (*p)[4]; 它表明指针p指向数组指针,用来指向一个含有4个元素的一维整型数组,p的值就是该一维数组的首地址。 注意: p两侧括号不能漏,如果写成*p[4],由于[]的

咸鱼菌 510

【PTA】20 - 分流考试真题(已完结)

目录 6-1 统计个位数字 6-2 求整数数组中的最大值 *****6-3 整理奇偶数增强篇 6-4统计字符串中数字字符的个数 6-5 求n×n方阵主副对角线元素之和 6-6 十进制转换二进制 *****7-1 找鞍点 **7-2找出总分最高的学生 - 结构体 ***7-3求数列之和[A] 6-1 统计个位数字 本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。 函数接口定义: int Count_Dig....

weixin_61639349的博客 3396

指向数组的指针

指向数组的指针变量成为数组指针变量一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。 该实例我们实现了使用数组的指针引用数组,利用数组名以及下标引用数组等。 其中,使用数组的指针和数组的下标来遍历数组的时候可能不太容易理解,但是我已经在注释中说明清楚了。 下面附上我的代码: #include &lt;stdio.h&gt; /** * 本实例实现通过指向数组...

hongbochen1223的专栏 384

*(p+i) ,C语言数组指针_C语言中文网

一个变量一个地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。 字节是内存中的最小可操作单位,我们通常将一个字节称为一个内存单元。 一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 8546
上一篇: 黑马程序员————C语言数组
下一篇: 黑马程序员————C语言结构体
bluedevils99
博客等级 码龄12年 0粉丝 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值