C语言学习笔记—指针(一)地址的引入、指针变量、指针类型、数组的指针

C语言程序设计(第五版)谭浩强著 第5章习题答案 C语言程序设计(第五版)第五章课后习题答案,包含详细解题思路,代码和运行结果。 阅读详情

在这里插入图片描述

地址的引入

首先我们引入一个场景:

A:你好请问附近哪里有花店?
B:有“菊花台”花店
A:请问菊花台花店在哪里?
B:直走,左拐,右拐,直走;(中山路102号107)
也就是说A去花店有两种方式

  1. 通过店名一路问过去
  2. 通过花店地址直接找到
    上边的这个场景就对应了C语言变量的访问。
    而变量名的访问有两种方式:
  3. 变量名
  4. 变量地址
    例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int  juHuaTai = 10;
    int meiGuiTai = 9;
    //通过变量名访问
    printf("ju = %d\n",juHuaTai);
    printf("mei = %d\n",meiGuiTai);
   //&是取地址运算符,变量名所代表的变量地址
    printf("ju的地址是:%p\n",&juHuaTai);
    printf("mei的地址是:%p\n",&meiGuiTai);
    //通过地址访问
     printf("通过地址来获取ju:%d\n",*(&juHuaTai));//此时 *代表的是一个运算符,功能是取出内存地址中的数据(取内容运算符) 
    printf("通过地址来获取mei:%d\n",*(&meiGuiTai));
	system("pause");
	return 0;
}

指针变量

关于数组我们知道了使用数组来存储多个同类型的数据并进行运算,前提是我们要知道数组的长度,给定以后便不能再改变。那么我们假若不知道需要处理的数据量,利用数组倒也是可以实现,那就是估计一个数组上限,但这样常常会造成空间浪费。
由此我们就有了指针来存储空间的动态分配。
指针:就是我们上文所说的,通过地址访问操作数据,用指针访问内存和操纵地址。
指针变量:那么和为指针变量呢?即转没用来存放变量地址的变量。
我们举一个例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int x ;
x = 1000;
int *p;
p = &x;
//我们就说p是一个指针变量
//我们就可以通过p间接访问x.
	system("pause");
	return 0;
}

指针变量的定义:
一般形式:
类型名 *指针变量名
定义指针变量要使用指针声明符 *。
另外我们还需要知道:

  1. C语言使用指针对变量的地址进行操作。
  2. 指针是用来存放内存地址的变量。
  3. 如果一个指针变量的值是另一个变量的地址,那么就称该指针变量指向另外一个变量。
  4. 定义多个指针变量时每一个指针变量前面都要加上*号。

指针变量的初始化:
例:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int x ;
	
	int *p = &x;
	
	system("pause");
	return 0;
}

这里我们要知道的是,初始化时指针变量名前边的*值是代表它是一个指针变量。

指针类型

指针变量定义时的数据类型要和它所指向的变量的数据类型要一致。也就是说什么类型的指针存放什么类型的数据的地址。

#include <stdio.h>
#include <stdlib.h>

int main ()
{
	int *p; //只能存放整数的地址
	char *p2; l//只能存放字符数据的地址
	int a = 10;
	char c = "A';
	p= &a; 
	// p=&c判断计算机的大小瑞
	p2 = &c;
	printf ("a=%d\n" ,*p);
	printf ( "c=%c\n" ,*p2);
	
	//指针++
	prihtf ( "a的地址打印:%p\n",p) ;
	printf ( "a的地址++打印: %p\n",++p);
	printf ("c的地址打印:%p\n",p2) ;
	printf ("c的地址++打印: %p\n",++p2) ;
	
	system ( ""pause" ) ;
	return 0;

数组的指针

数组名本身也是一个地址即指针,但是指针是以地址为值的变量,而数组名的值是一个特殊的固定地址,可以看做指针常量。

#include <stdio.h>
#include <stdlib.h>

int main ()
{
	int array[3]= {1,2,3};
	printf("第一个元素的地址%p\n" , &array[0]);
	printf("第二个元素的地址%p\n" , &array[1]);
	printf("第三个元素的地址%p\n" , &array[2]);
	
	system ( ""pause" ) ;
	return 0;

我们知道数组关心的是首地址,两种表示方式:

  1. 数组名 = 地址
  2. 第一个元素的地址
    于是我们可以写作以下形式:
	int *parray;
	parray = &array[0];
	//parray = array;
	
	printf("第一个元素的地址%p\n",parray++);
	printf("第二个元素的地址%p\n",parray++);
	printf("第三个元素的地址%p\n",parray++);

于是我们便可以知道用指针遍历数组的方式

#include <stdio.h>
#include <stdlib.h>

int main ()
{
	int array[3]= {1,2,3};
	int *parray;
	parray = &array[0];
	
	for(i=0;i<3;i++){
	
		printf(" %d ",*parray) ;
		parray++;
	}
	/*由数组名 = 地址又可以如下操作
		for(i=0;i<3;i++){
	
		printf(" %d ",parray[i]) ;
		parray++;
	}
	*/
	
	system ( ""pause" ) ;
	return 0;
谭浩强第五版C语言课后习题(编程题)+答案 辗转相除法的原理是用a除b,如果有余数,就把b赋给a,再把余数赋给b,当a除b余数为零的时候,此时的b就是二者的最大公约数,对于第一次除的时候谁做被除数是无所谓的,因为如果第一次a小于b,那么a除b的余数就是a,然后执行循环内部的操作把b赋给a,把余数赋给b,就变成了被除数大。升序数组中插入一个数的思想:如果在中间插入,就把最后的元素往后挪一位,然后在原来最后一个数的位置上插入我们想要插入的数。15. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 阅读详情

相关推荐

C语言学习—数组指针和指针数组的区别

C语言中数组指针和指针数组的区别

98同学吖的博客 2万+

C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10

目录第1章 C语言概述第2章 数据类型及其运算第3章 顺序结构程序设计第4章 选择结构程序设计第5章 循环结构程序设计第7章 函数与指针第8章 结构体与共用体第9章 文件第10章 图形与动画 习题解析与答案 第1章 C语言概述 一. 简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switc

@MIKE小助手 3万+

C语言学习——指针(定义、变量的指针和指向变量的指针变量)

C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。指针变量不同于整型变量和其他类型的变量,它是用来专门存放地址的,必须将它定义为“指针类型”。int i, j;//定义两个指针变量,指向整型变量的指针变量。基本类型 *指针变量名;那么,怎样使一个指针变量指向另一个变量呢?可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向该变量。//将变量i的地址存放到该指针中,因此pointer_1就“指向”了变量i指针变量前面的“ * ”表示该变量的类型为指针型变量。

weixin_63292027的博客 1966

C语言程序设计第五版 谭浩强 第五版课后答案

谭浩强 C语言程序设计第五版 第4章课后答案 3.求两个正整数m和n,求其最大公约数和最小公倍数。 #include<stdio.h> void main() { int m, n, t, i, a = 1; scanf("%d%d", &m, &n); if (m < n) { t = m; m = n; n = t; } for (i ...

月已满西楼的博客 30万+

数组存储与指针学习笔记(三)指针与数组

主要从嵌入式角度介绍指针与数组的爱恨情仇

qq_41866091的博客 5375

C程序设计谭浩强第五版课后答案.pdf

C程序设计谭浩强第五版课后答案.pdf

C语言学习笔记--数组指针和指向数组的指针变量(要求掌握)

一个变量有一个地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。所谓数组的指针是指数组的起始地址数组元素的指针是数组元素的地址。

weixin_46149248的博客 1898

谭浩强C语言程序设计第五版详细答案

谭浩强C语言程序设计第五版详细答案。 该教材有配套教材——《C程序设计(第五版)学习辅导》 《C程序设计(第五版》是由谭浩强编著,2017年清华大学出版社出版的“十二五”普通高等教育本科国家级规划教材、北京市高等教育精品立项项目教材、中国高等院校计算机基础教育课程体系规划教材。该教材是既可作为高等学校各专业的正式教材,也适合读者自学。

C语言学习之指针总结

C语言的灵魂在于指针,对于初学者来说,对这个灵魂了解的更大程度上体现在难度上,但是实际上也仅仅是由于不熟练,只要学完过后,看几个例子,跟着写几段代码,就会发现其实指针和数组,循环,分支语法之类的运用难度上差不了很多(虽然数组的本质就是指针)。所以,要对自己有信心!接下来正文开始。

aacd2719的博客 2194

C语言程序设计第五版_谭浩强_课后习题答案完整版.doc

C语言程序设计第五版_谭浩强_课后习题答案完整版

数字孪生在智慧医疗中的5个创新应用:从手术模拟到个性化治疗

数字孪生技术通过创建患者或医疗流程的动态虚拟映射,正在深刻变革智慧医疗。本文重点剖析了其在个性化治疗、手术模拟与导航、药物研发、医院管理优化及慢性病管理五大核心场景的创新应用,展现了如何利用智能映射与数据融合,为精准医疗和高效决策提供强大支持。

weixin_29189003的博客 443

C语言学习笔记——指针、数组作为函数参数传递的方式

指针作为函数参数传递一维数组 C 语言中声明了一个数组TYPE array[n],则数组名称array 就有了两重含义: 第一,它代表整个数组,它的类型是TYPE[n]; 第二,它是一个常量指针,该指针的类型是TYPE*,该指针指向的类型是TYPE。 因此,指针作为函数参数传递一维数组有4种形式: #include &amp;lt;stdio.h&amp;gt; #define N 3 float average...

展翅飞翔mxq的博客 1万+

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1575

嵌入式C语言学习笔记 - 函数、数组、指针

指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的。不同类型的指针之间,是不能互相赋值的,void类型的指针打破了上面的观念,void没有任何类型;指针变量占用的大小,和数据类型无关,和编译器相关的(32位:32字节,64位:64字节);变量地址:说的是变量的首地址, &a 取变量a的地址(4字节) 以上基于32位操作系统。void类型的指针,无法获取变量中的数据,也不能进行指针的加减计算;

MM_MG的博客 946

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

从零到精通:BLDC电机驱动电路详解与设计思路

这套电机驱动电路从核心控制器到反馈采集模块,涉及了BLDC电机驱动的方方面面。每一个模块的设计和选择都需要综合考虑系统需求和实际使用环境。在实际应用中,很多细微的设计改进都会显著影响电机的运行性能。

weixin_43199439的博客 3101

C语言学习笔记——指针

类型变量,可改变指向。

qq_46468829的博客 1570

docker-compose Install OrangeHRM

OrangeHRM是一个全面的人力资源管理HRM) 系统,它包含任何企业所需的所有基本功能。OrangeHRM旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。

极致,细节 1004

C语言指针数组和数组指针详解

C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法 C语言基础-数据类型 C语言中的输入输出函数 C语言流程控制语句 C语言数组——一维数组 C语言数组——二维数组 C语言数组——字符数组 C语言中常用的6个字符串处理函

专注于C语言编程干货分享 5674

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

SAC-IA算法点云粗配准

SAC-IA(Sample Consensus Initial Alignment)是PCL库中的一种初始点云配准算法,它使用特征匹配和RANSAC(随机抽样一致性)框架来估计两个点云之间的初始刚性变换。其目标是通过特征描述符找到一组可靠的匹配点对,并使用这些点对估计初始对齐的变换矩阵。

twnkie的博客 1445

C语言学习——指针(2)

本篇文章主要讲解了指针的相关知识,包括数组名,指针访问数组,一维数组的传参本质,二级指针,指针数组,数组指针变量,二维数组的传参本质,函数指针变量,函数指针数组,以及typedef关键字的使用

2401_87086870的博客 2143

SIWAVE+ADS提取PCB走线寄生参数

本文将介绍一种很适合PCB走线提取寄生电感等参数的方法,即是通过SIWAVE将PCB走线的S参数提取出来,再通过ADS将S参数转换成电感、电容值。

sinat_15150363的博客 1765

c语言malloc数组后赋值为0_C语言学习笔记(三)指针

0 往期链接Chenglin Li:C语言学习(一)全部知识点Chenglin Li:C语言学习(二)指针函数分配内存1 指针指针式C语言中的一个重要概念,也是C语言的一个重要特色。指针可以有效的表达复杂的数据结构、动态分配内存、有效的利用内存空间。能方便的表示数组和字符串,提高数据处理效率。指针作为函数参数,能使函数调用得到多余1个的值。2 指针开辟内存/* float *DropLowestM...

weixin_36204727的博客 1817

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言学习之二级指针与指针数组的关系

一、引言 指针,对于C语言学习者,可能是最困难的知识点了。 因为指针与内存有关,所以理解起来颇为晦涩难明,想要学好指针,还是要将基础知识巩固,通过数形结合的方式理解学习指针。 二、基础知识 指针:在C语言中,指针是一种变量,在64位机中占8个字节 一级指针:存储普通变量的地址的指针 二级指针:存储一级指针地址的指针 数组:包含给定类型的一些对象,并将这些对象依次存储在连续的内存空间中。 一维数组:相对于多维数组,只有一维,用数学的思维,可以...

陈子陌的博客 2160

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: C语言学习笔记—数组与函数的综合应用:学生成绩管理
下一篇: C语言指针数组小练习——指针数组函数的综合应用(学生成绩管理的指针数组实现)
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值