C语言的行指针与元素指针有什么区别?
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/12 01:06:51
C语言的行指针与元素指针有什么区别?
先举个例子吧,先定义一个二维数组int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
数组名a就是一个行指针,a[0]就是一个列指针;
就拿这个例子说吧,a和a[0]虽然地址相同,可是指针指向类型却不同,对指针进行+1运算,显然得到的结果是不同的,因此a(行指针)+1中的"1”代表一行中全部元素所占的字节数,而a[0]+1,这里的1则是一个元素所占的字节数,是两个不同的概念.
为了说明这个容易搞混的问题,可以用军训中排队点名来说明.班长逐个检查本班战士是否在队列中,班长每移动一步,走过一个战士,而排长点名只检查本排各各班是否到齐.排长只从第0班的起始位置走到第1个班的起始位置,看来只走了一步,但实际上他跳过了10个战士,这相当于a+1,班长面对的战士,排长面对的是班,班长相当对列指针,排长相当于行指针.
为了找到某个班内的某一个战士,必须给出两个参数
数组名a就是一个行指针,a[0]就是一个列指针;
就拿这个例子说吧,a和a[0]虽然地址相同,可是指针指向类型却不同,对指针进行+1运算,显然得到的结果是不同的,因此a(行指针)+1中的"1”代表一行中全部元素所占的字节数,而a[0]+1,这里的1则是一个元素所占的字节数,是两个不同的概念.
为了说明这个容易搞混的问题,可以用军训中排队点名来说明.班长逐个检查本班战士是否在队列中,班长每移动一步,走过一个战士,而排长点名只检查本排各各班是否到齐.排长只从第0班的起始位置走到第1个班的起始位置,看来只走了一步,但实际上他跳过了10个战士,这相当于a+1,班长面对的战士,排长面对的是班,班长相当对列指针,排长相当于行指针.
为了找到某个班内的某一个战士,必须给出两个参数