【C Prime Plus】学习笔记,Chapter 10,数组和指针之四

C++ Prime Plus(第6版) 第4章 学习笔记 存储多个同类型值 在内存中连续type name{size}; 阅读详情
 

// 指针操作:使用指针作为参数 page 661

#include <stdio.h>
#define SIZE 10
int sump(int *start,int *end);
int main(void)
{
	int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
	long answer; // 数组是int,求和防止出界,用long
	answer = sump(marbles,marbles+SIZE); 
	// marbles 对应第一个元素的地址,然后移动10个单元(int),这他妈的都移到数组外面了. 心理不安呐,指针越界了,会不会出乱子?
	// marbles 作为首地址,移动9次(每次一个int,4字节的单元),恰好对应最后一个元素的地址,多好啊,非得搞出界,让人心理不安.
	printf("The total number of marbles is %ld.\n",answer);

	//---
	return 0;
}

/* 使用指针作为参数*/

int sump(int *start,int *end)
{
   	// 干脆把地址输出来看看
		printf("start pointer address(起始地址):%ld \n",start);
	    printf(" end  pointer address(终止地址):%ld \n",end);


	int total=0;
	while(start < end )
	{
		total+= *start; 
		start++;  // start 移动到下一个int 单元(这是因为start形参定义为int类型),指向下一个地址.
		// 干脆把地址输出来看看,start 已经 加加了后的值
		printf("start pointer address:%ld \n",start);
	}

	return total;
}


输出结果:

start pointer address(起始地址):1245016
 end  pointer address(终止地址):1245056
start pointer address:1245020
start pointer address:1245024
start pointer address:1245028
start pointer address:1245032
start pointer address:1245036
start pointer address:1245040
start pointer address:1245044
start pointer address:1245048
start pointer address:1245052
start pointer address:1245056
The total number of marbles is 190.

 

//--------------------

 


/*
关于越界担忧的解释,该书是这样解释的:
C保证了当为一个数组分配空间的时候,指针指向数组结束后的第一个地址时,该指针是有效的指针
(再往后移一个地址就无效了哈)
原文:
C guarantees that when it allocates space for an array, a pointer to the first location
after the end of array is a valid pointer.

  他说C这么搞呢,是为了保证代码的简洁优雅 (我看这就是他妈的有病,增加了程序的困恼和学习成本以及程序员间的沟通成本)
  他说:  answer = sump(marbles,marbles+SIZE)  这样简洁.
 
  他说:  answer = sump(marbles,marbles+SIZE-1) 这样外表不优雅,很难记,容易导致编程错误
  (真他妈的恶心,C搞那么多额外的规定(保证) 不是更加难记么?)

  最后他说:
  By the way, although C guarantees that the pointer marbles+SIZE
  is a valid pointer,it makes no guarantees about marbles[SIZE],
  the value stored at that laction.

  (这真够恶心的,他意思是说 C保证了 指针(数组的)越界一个地址 有效,但是那个地址的值不保证哦,这点 你就得记住了.)
 */

 

深入学习C语言与C++基础:《C Prime Plus Sixth Edition》精读指南 C语言是一种广泛使用的计算机编程语言,它以其高效性和灵活性而著称,特别适合用于系统编程和硬件操作。它是许多现代编程语言的基础,包括C++和Objective-C。C语言的标准由ANSI于1989年制定,后续由国际标准化组织(ISO)在1990年正式采纳。函数是C语言中实现代码模块化的基本单位,它允许程序员将任务分解成独立的代码块,每块执行特定的功能。函数的定义包括返回类型、函数名、参数列表以及函数体。返回类型 函数名(参数类型 参数名, ...) {// 函数体。 阅读详情

相关推荐

Qt中常见的面试题总结

基于Qt开发的一些常用面试题

一名热爱编程的程序员 8492

C 语言中有关常见的运算符问题

最近在优快云 论坛上看到有关运算符的问题,其实运算符最典型的问题就是优先级和自加运算和自减运算。   运算符的优先级顺序,从高到底依次是:   初等运算符(),[],->.   单目运算符!,~,++,--,-,*,sizeof   算术运算符+,-,*,/,%   关系运算符>,=,   逻辑运算符&& ,||   条件运算符?:   赋值运算符=,+=,-=,*=,/=,%=

写自己的代码,让别人去看吧 1371

AUTOSAR/汽车行业

AUTOSAR架构及汽车产业链相关介绍

m0_54254513的博客 1万+

使用指针参数

向函数传递数组信息的方法一是使用一个指针参量来确定数组的开始起点,使用一个整数参量来指明数组的元素个数。方法二是传递两个指针,第一个指针指明数组的起始地址,第二个指针指明数组的结束地址。例如: #include #define SIZE 10 int sump (int *start,int *end); int main(void) {     int marbles[SIZE]={

whmnirvana的博客 418

基于Spring Boot框架的网上蛋糕销售系统

随着互联网的普及和电子商务的迅猛发展,网上购物已经成为人们日常生活的一部分。蛋糕作为一种受欢迎的食品,其销售市场也逐渐向网络化方向发展。网上蛋糕销售系统能够打破时间和地域的限制,让消费者随时随地浏览和购买蛋糕,同时也为蛋糕商家提供了一个展示和销售产品的平台。该系统的开发旨在提高蛋糕预定和销售的便捷性,节约时间和经济成本,并推动蛋糕市场的进一步发展。开发语言:Java,一种面向对象的编程语言,具有跨平台性、稳定性和安全性等特点,适用于构建大型、复杂的Web应用程序。 框架:Spring Boot,一个基于Sp

2301_81127431的博客 996

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。

flomingo1的专栏 2400

C Primer Plus怎样高效学?C语言大神案例值得借鉴!

我们常常听到有人争论“Python、Java、PHP......是这个世界上最好的语言”,却很少听到有人夸赞C语言,为什么呢?因为C语言实在是太太太太难了......为什么这么多人学不会...

优快云资讯 4204

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

c语言 数组元素之和—指针算法

数组元素之和 #include<stdio.h> #define SIZE 10 int sump(int* start, int* end); int main() { int marbles[SIZE] = {20, 10, 5, 39, 4, 16, 19, 26, 31, 20}; long answer; answer = sump(marbles, marbles+SIZE); printf("The total number of marbles is %ld.\n",

qq_44889022的博客 1936

【x265编码器】章节6——x265的码率控制

对于CRF模式而言,右边这部分是是固定值m_rateFactorConstant,在初始化的时候确定,跟分辨率,qCompress这个参数是外部可设参数,默认值0.6,因此QP的选择只跟编码复杂度有关,跟码率无关,编码复杂度越高,QP值越高,因此可以一定程度上说CRF模式是恒定质量的编码模式。其中Complex表示当前帧的编码复杂度,x265中用lookahead模块计算的SATD作为衡量当前帧的复杂度,c为模型参数,qscale是率失真优化中的拉格朗日乘子,R为编码当前帧需要的比特数。

vcvdv123的博客 1万+

【ACP】2025-最新-疑难题解析- 练习二汇总

全球加速是优化公网访问的,负载均衡是分发流量的,公网 NAT 网关是处理公网 IP 的,高速通道是建私网连接但不直接提供固定私网地址功能。C 是客户端加密方式,D 是 ECS 云盘加密,都不属于 OSS 服务器端加密。某企业想使用云服务器 ECS + 负载均衡 SLB + 弹性伸缩 (Auto Scaling) 的架构搭建一个企业级门户网站,技术负责人对于负载均衡和弹性伸缩配合使用没有经验,于是将他理解的两种产品配合使用的一些技术细节列成了一个表单,并请作为架构师的您帮他做一下鉴别,以下哪些项是正确的?

jundao1997的专栏 293

整理:C primer plus 学习笔记

前言:简单看了一遍C Primer Plus, 整理了一下,因为时间比较少,自己理解地比较肤浅,所以第一版比较简陋。 假期的时候应该会有时间再整理一下。------2018/11/5 2019/1/23 寒假整理一下笔记。 2019/3/7 大二下学期记:这本书内容还是很多的,举例比较多,也涉及了一些C语言的”高级“特性,有些地方难度很高,但是即使没能掌握也并不影响使用C语言。感觉想用笔记来...

一只大鸽子的博客 1万+

STM32H750VB与AD5292通讯,写入阻值后,AD5292 的阻值没有变化,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1098

【C Prime Plus】学习笔记,Chapter 10,数组和指针之一

// C Prime Plus Page 651 // Listing 10.8 #include #define SIZE 4 int main(void) { short dates[SIZE]; short * pti; short index; double bills[SIZE]; double *ptf; pti = dates; ptf

-----------------------------不要在跟自己无关的事情上浪费时间 1296

lwip-2.0.3

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C primer plus 学习笔记 第10章 数组和指针

第10章 数组和指针 10.1 数组 数组由数据类型相同的一系列元素组成。使用数组时,通过声明数组告诉编译器数组中含有多少元素和这些元素的类型。 下面是几个数组声明: float candy[365]; char code[12]; 10.1.1 初始化数组 使用{}来初始化数组: int powers[3] = {1,2,4}; tip:使用const前缀声明数...

一只大鸽子的博客 1791

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《C Prime Plus》读书笔记(10):数组和数组指针

文章目录数组的初始化数组指针数组指针与数组下标的关系 数组的初始化 当数组为静态变量时(块作用域、外部链接、内部链接的静态变量),数组默认初始化为0 当数组为自动变量时,数组的初始化方式: 已知数组大小完全初始化和部分初始化 自动匹配数组大小初始化 #include<stdio.h> int arr1[5]; // 默认初始化 static int arr2[5]; // 默认初始化 int main(){ static int arr3[5] // 默认初始化 /*不可默

fang 0 jun的博客 211

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C Prime Plus】学习笔记,Chapter 10,数组初始化问题

// 【C Prime Plus】学习笔记,Chapter 10, P631 #include int main(void) { int i; char arr[4]; printf("局部变量没有初始化,看看打印出来是什么\n"); for(i=0;i<4;i++) printf("%d\n",arr[i]); printf("局部变量仅仅初始

-----------------------------不要在跟自己无关的事情上浪费时间 911

c prime plus 学习重点知识(数组与指针)

数组地址 我们举一个变相使用指针的例子:数组名是数组首元素的地址。也就是说,如果flizny是一个数组,下面的语句成立: flizny = &flizny[0]; //数组名是该数组首元素的地址 flizny和&flizny[0] 都表示数组首元素的内存地址(&是地址运算符)。两者都是常量,在程序的运行过程中,不会改变。但是,可以把它们赋值给指针变量,然后可以修改指针变量的值。 地址存储 首先看下下面这段代码: #include<stdio.h> #define n 3

qq_35082781的博客 565

【C Prime Plus】学习笔记,Chapter 10,数组和指针之三

#include #define SIZE 10 int sum(int [],int); int main(void) { int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20}; long answer; answer = sum(marbles,SIZE); printf("the total number of marbles

-----------------------------不要在跟自己无关的事情上浪费时间 910

【C Prime Plus】学习笔记,Chapter 10,数组和指针之二

// C Prime Plus, Page 656 /*   int marbles[10];   如果要计算这个数组所有元素的和,函数的可能调用形式如下:   int total = sum(marbles)   数组名 marbles是它的第一个元素的 地址,而地址(指针)是个整型数(int)   也就是说形参marbles实际是传递了个地址,因此可以用个int *p 指针来构造函

-----------------------------不要在跟自己无关的事情上浪费时间 648

【C Prime Plus】学习笔记,Chapter 10,数组和指针之五

// 【C Prime Plus】学习笔记,Chapter 10,数组和指针之五 // 指针的赋值,加减运算 // Page 667 #include int main(void) { int *ptr0,*ptr1,*ptr2; // 如果指针没有初始化,进行 ++ 运算,编译会warning使用了没有初始化的指针,但是不是严重错误 //ptr

-----------------------------不要在跟自己无关的事情上浪费时间 899

c primer plus 指针与多维数组探究

C primer plusP266,指针和多维数组,zippo1_yql20170628.c程序,主要代码如下 int a=1;     long long b=2; int zippo[4][2] = { {2,4}, {6,8}, {1,3}, {5, 7} }; int (*pz)[2];       printf("   zippo = %p,    zippo + 1 = %

legendyql的博客 603

C和C++ Prime Plus 学习资源:一站式编程学习解决方案

C和C++ Prime Plus 学习资源:一站式编程学习解决方案 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在编程学习的道路上,找到一套合适的学习资源至关重要。C和C++ Prime Plus 学习资源为您提供了一套全面的编程学习解决方案,涵盖C语言和C++语言的基础到高级知识。项目内含丰富的源码资源,辅助您深入理解《C Prime Plus》和《C++ Pri...

gitblog_06704的博客 845

C Prime Plus 第6章习题

P170~P176

weixin_45641816的博客 1079

C和C++ Prime Plus 学习资源

C和C++ Prime Plus 学习资源 去发现同类优质开源项目:https://gitcode.com/ 感谢您访问本仓库,这里提供了《C Prime Plus》和《C++ Prime Plus》两本书的章节源码资源,旨在帮助学习者和开发者更好地理解和掌握C语言和C++语言的编程技巧。 资源简介 本资源文件包含以下内容: C Prime Plus:涵盖了C语言的入门到进阶知识,包括基础语法、...

gitblog_06796的博客 386
上一篇: 【C Prime Plus】学习笔记,Chapter 10,数组和指针之三
下一篇: 【C Prime Plus】学习笔记,Chapter 10,数组和指针之五
sergery
博客等级 码龄18年 113粉丝 136原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值