찾다
백엔드 개발파이썬 튜토리얼为什么大多数编程语言中的数组都是从0开始计数的,比从1开始计数有什么好处?

回复内容:

提供两个链接:
1. Why does the indexing start with zero in 'C'? (stackoverflow.com/quest)
2. Why numbering should start at zero, by Dijkstra. (cs.utexas.edu/users/EWD) 不是全部,Pascal类语言就可以不从0开始计数,比如从-100..100 考虑C语言指针
int a[10];
那么 a[0] === *(a+0)
我认为是这么考虑的 先说说为什么C语言的数组是从0开始
众所周知,C语言的数组是直接操作内存,那我们肯定得从内存的寻址开始说起:
以“以行为主序”的分配为例:设数组的基址为LOC(a c1 c2),每个数组元素占据l 个地址单元,那么aij 的物理地址可用一线性寻址函数计算:
LOC(aij)=LOC(a c1 c2)+( (i- c1) *( d2 - c2 + 1)+ (j- c2) )*l
推广到一般的三维数组:A[c1..d1] [c2..d2] [c3..d3],则aijk 的物理地址为:
LOC(i,j,k)=LOC(a c1 c2 c3)+( (i- c1) *( d2 - c2 + 1)* (d3- c3 + 1)+ (j- c2) *( d3- c3 + 1)+(k- c3))*l
显然,此处的c1 c2 c3 为0 会大大简化计算有木有啊!!越是多维数组效果越明显
这对于计算机寻址计算来说显然好处是大大的啊
这就是为什么最早C语言的数组起始都是0
至于什么其他的原因觉得美啊什么的都是后来人们YY的
事实上,在现在很多时候计算不再是瓶颈的时候,数组的下标也有从1开始的
比如matlab
难道matlab就不美了么= = 从技术实现上讲,数组的下标就是内存的偏移量吧。如p指针指向数组的内存,p+0就是第一个元素的内存地址,p+n ×sizeOfElement就是第n个元素的内存地址 学C语言的时候这么理解过:
数组名a就是数组第一个元素的内存地址
而取数组元素,就是通过a地址访问内存的过程
取第1个元素,就是*(a+0)
取第2个元素,就是*(a+1),
...
所以下标从0开始 不见得吧,ObjectPascal中数组可以从1开始,这个“从零开始”的问题,我个人认为这是个人为的历史遗留问题,就像现在的计算机键盘的字母分布,没有什么特殊理论依据 很多语言数组不是从0开始的(比如 MATLAB),但是一位计算机科学先驱 Edsger Dijkstra(发明 Dijkstra 最短路算法的那位)在 1982年写过文章,推崇从0开始做下标,叫 “为啥得从0开始数数”。

全文在这里:Why numbering should start at zero (EWD 831)

总结一下:
  1. 描述自然数子序列,上界和下届的差应该是子序列的长度,数组下标可以理解为一个特殊的这种子序列。
  2. 下界应该包含数据内的元素,上届应该不包含。换句话来说,下界应该是数组第一个索引。否则可能对于某些子序列,我们得用非自然数的实数作为下界。
  3. 如果考虑条件(1) 和 条件(2),描述上界和下界有两个办法:1
翻译自 Quora Travis Addair's answer to Why do array indices start with 0 (zero) in many programming languages?
不过翻译完了感觉有些不大对劲。描述区间(根据最大值和最小值判定的实数集合)和描述程序语言中数组元素是两码事吧。。。还是从C语言的实现上解释比较靠谱。 在硬件上 计数什么的都是从所有位全部为低电平(正逻辑)开始的,也就是无符号整型里边的0。 0 0是+运算的幺元,1是*运算的幺元.
*比+用的多,所以用0.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Apr 02, 2025 am 07:12 AM

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?Apr 02, 2025 am 07:09 AM

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까?정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까?Apr 02, 2025 am 07:06 AM

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까? HTML 또는 기타 마크 업 언어를 다룰 때는 정규 표현식이 종종 필요합니다.

Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까?Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까?Apr 02, 2025 am 07:03 AM

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.