本质上,起始地址和首地址没有区别,对同一个数组来说,它们是同一个地址。
成都创新互联公司是一家专注于网站设计制作、成都网站制作与策划设计,内丘网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:内丘等地区。内丘做网站价格咨询:18982081108
其实这两个说法没有很明确的概念,只是按照惯例,经常会说:
数组名,是数组在内存中连续存储单元的首地址
数组的指针,是数组的起始地址
只是按照数组方式说明和按照指针方式说明罢了,如果非要说有区别,就是数组方式访问和指针方式访问的区别,a[i++]的访问不会改变a的地址,但如果 *p=a; p++会修改指针的起始地址。
要知道main函数也是由其他的程序调用的。
我们编写的程序,最终是不存在所谓的函数名的,有的只有内存单元地址0xffeedd00.
我们的程序执行时,程序加载到内存,比方说整个程序所占用的内存范围是0xffee0000 ~ 0xffeedd00,这么多。
假设程序有一个小函数fun(),那么它的范围可能是0xffee0000~0xffee00ff。
那么函数fun()的入口地址是多少? 0xffee0000。。
那么函数名fun实际上就是0xffee0000的别称。
你用一个指针指向这个函数,那么你把 指针 = 函数名,实际就是把0xffee0000这个内存单元的地址给指针p。
所以,结论是:
函数名 是 程序在执行时, 函数所占内存单元块的 首地址 的别称。
C语言中好像没有什么“首地址”吧。那是汇编当中吧?
我以前接触过一点汇编现在忘记差不多了。我记得首地址好像就是你这样理解的。如果是int型+0就是首地址。+4 +8分别是第二个和第三个变量。
比如说是name[]这个数组吧,首地址就是你这个数组第一个元素所占的地址。应该能一行一行的拷贝字符、、、
这个得看你的数据是什么类型的,比如是int的,int a,那么a就是取a的首地址,但是a+sizeof(a)却不是a的末尾地址,因为这个时候的+不是加几个字节,而是加几个元素,因为a指向一个int变量,故a + sizeof(a) 实际上是 a + sizeof(a) * sizeof(int)故加了16个字节,但是你的目的只是加4个字节,故a + 1就可以了。
你可以写程序测试一下。
比如一个对象/数组之类的占用很多字节的内存,它占用的第一个内存的地址就是首地址了。例如char s[16]从0x1到0x10,首地址就是s[0]的地址也就是0x10