❶ c语言,数组首地址的地址和首地址的内容居然是一样的,看懂了就进来看看吧
理解这个很重要,当你理解之后你就会发现设计C语言的大师们是多么的聪明,这些设计非常利于C语言书写的简洁
a与&a都是指针,指针有两个要素
第一个是地址值,也就指向的位置,你打印出来的就是地址值,a与&a的地址值是一样的
第二个是类型(所指向的数据类型),a指向数组第一个元素,&a指向数组a,a+1后的地址值会偏移一个元素的长度,&a+1后的地址值会便宜一整个数组的长度,所以a与&a类型是不一样的
关于指针与数组的关系,理解之后对你写代码质量会有很大的帮助,当然一开始理解起来会有难度,有一句话说的好:在C语言中只有一维数组(N维数组的元素是数组),数组名作为指针时永远指向第一个元素,如
数组a[3] ,*a = a[0],
数组a[3][4], *a = a[0],只不过这时候a[0]又是一个数组,这时候a[0]又是指向它自己元素的第一个元素,又有*a[0] = a[0][0].
这种方式可以推广到N维数组,所有数组直接对数组名取地址(如&a)得到的指针指向该数组,而不是指向第一个元素,注意这点区别哦,理解了我上面所说的,就知道了
还有对你的疑问说说我的看法
“arr表示的是数组的首地址”:没错,arr就是指向第一个元素的指针
"&arr表示的是数组的首地址的地址":这句话不对,我更倾向于把&arr理解为指向数组arr的指针
“arr相当于一个指针, 我现在直接用printf输出arr相当于输出了arr中储存的内容(不是输出以该内容为地址的变量),其结果居然与arr的地址是相同的,这怎么可能。”:
arr只是一个符号,本身不是变量不存在存储内容的说法
❷ 到底什么是“数组的首地址”刚学C,不太懂
其实就是数组的第一个元素的地址,比如说数组a[10],它的首元素就是a[0]。如果作为
实参
传入的话就是a[0]在内存中的地址。可以用指针来接收。
❸ C语言中,数组在内存中占一片()的存储区,由()代表它的首地址。
数组在内存中占一片(连续)的存储区,由(首元素的地址)代表它的首地址
数组名是一个(指针)常量,不能对它进行赋值运算
❹ c语言中什么叫首地址,希望详细点,最好有例举!!!
“首地址”一词不是C语言里的术语。是计算机原理里面的概念。
计算机存储器(主要指内存储器)的每个单元都有一个编号,称作地址,CPU就是靠这个编号——地址来访问(即读、写)每个单元。
而程序中的变量,有些需要不止一个单元来存放。例如C语言中的long型变量,通常都是32位二进制数,在每个单元都是8位的计算机存储器中,需要4个单元才能存放一个long型的数。
为了便于访问,一个变量所占用的这几个单元通常都连续存放,也就是说,占用地址连续的几个单元。地址连续的几个单元通常就叫做一个“存储区域”。
这样说,就该明白什么叫“首地址”了吧?就是该变量所占的存储区域中的第一个单元的地址。
❺ C语言中数组名就是数组的首地址,怎么解释哥们菜鸟
这个数组名是a
a就相当于指针,存的是数组的首地址
1 #include<stdio.h>
2 int main()
3 {
4 int a[3][20];
5 printf("%p",a);
6 }
可以打印出a的地址
❻ C语言中,数组的起始地址是什么
数组变量的起始地址不定。
如定义:
int a[10];
int *p;
p = &a[0];
起始地址可以这样打印a数组起始地址:printf("address:%x\n', p);
你要知道这个干什么?
❼ c语言中把数组名作为该数组的什么即数组中第一个元素的存储地址
c语言中把数组名作为该数组的首地址,即数组中第一个元素的存储地址。如果有定义int a[10],*p;
则以下三个语句的作用是完全相同的:
p=a;
p=&a[0];
p=&a;