c语言数组、地址问题请高手解释?
1、首先,weekday[7] [10] 是二维数组,而printf(%s\n,weekday[1])表示输出的是第二行所有数组元素,相当于把weekday[1]是一个一维数组的数组名,传输的是一个地址,然后全部输出这一行的元素。
2、*(a+i)就是a[i],就是第i行的首地址。如果现在定义a是字符型数组,输出*a(也就是第一行的首地址)为0000,再输出*(a+1)就是0004,而不是0001,就可以说明a是指向一维数组的指针。
3、字符数组c在内存中占用4个字节,值分别为8,2,0,0 强制转换后,整型指针p指向这个字符数组的起始位置(当前情形为值8所在的那个地址)在小端格式下,p指向的整数被解释为00000208。
4、使用C语言编程,实际上使用的内存只有一种——虚拟内存。根据功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,无论单一变量还是数组,其内存分配都是如此。
在C语言里面数组的下标和地址的具体区别是什么?下标可以看成地址吗?
1、实际上a是数组名代表数组的首地址(注意虽然数组名和指针都代表地址,但是数组名不是指针,指针是变量,这个a是常量,可以叫指针常量)而i实际上可以看做数组中的元素距离数组首地址的偏移量(距离)。
2、当访问数组元素时,就需要使用下标,格式为 array_name[index]其中[index]就是数组的下标,含义为数组array_name的第index元素。在C语言中,index是从0开始计数的,所以对于NUM个元素的数组,合法下标范围为0~NUM-1。
3、在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。
4、因此,即使是那些提供了下标检查的编译器通常也会提供一些开关,允许你去掉下标检查。在C语言中,数组就是指针,他只保存了地址。这就造成无法检查是否越界,但也给指针和数组的交互操作提供极大的便利性。
5、下标可以是变量 也可以是常量。直接说a[0],a[1],a[2],a[3]这样的下标就是常量。
6、C语言中变量或者元素都有下标,是因为表示数组的某个元素,比如a[4],表示数组的第5个元素,数组元素下标是从0开始的。
C语言中数组首地址和数组第一个元素的地址有什么区别呢
1、数组的首地址是指向a[0],不是a[1]&a[1]等价于a+1也就是printf(%x\n,&a[1])和printf(%x\n,a+1)都可以表示a[1]的地址。
2、字符串常量的地址是字符串保存在内存的一组地址。字符数组的首地址代表着该字符串第一个元素的地址。字符指针是指向字符类型的指针。
3、数组的首地址,在同一计算机上,正常运行的情况下,这个地址是不会变的。数组的首地址,在不同的计算机,不同的系统上,一般情况下这个地址会变的。
4、其实就是数组的第一个元素的地址,比如说数组a[10],它的首元素就是a[0]。如果作为 实参 传入的话就是a[0]在内存中的地址。可以用指针来接收。
5、在java语法中,数组的地址等于数组第一个元素的地址。一旦通过int[] intArray = new int[]{1,1,2}创建一个int类型的数组之后,就会首先在堆内存中分配三个连续的地址空间,第一个地址也便是数组指向的地址。
C语言中如何指定数组的首地址在指定的地址
1、typedef struct { unsigned int CR;unsigned int SR;}PWM_TypeDef;define WN_PWM ( (PWM_TypeDef *) 0x40001000)WN_PWM变量的地址就放在了0x40001000的地址。这个地址往往是flash中的地址。
2、char (*p)[2];p=arr; // p指向首元素地址。
3、a[0][1],a[0]+1,p+1均表示该二维数组中的第二个元素的地址。 p+n表示第n+1个元素。
C语言:数组的值是地址
数组名是数组的首地址,就是数组中第一个元素的地址,是常量。常量是不能出现在赋值号=左边作为左值的。楼上的都没有解释清楚,说数组名就是指针是错误的,指针是变量,是用来存储变量地址值的变量,而数组名是常量。
所有类型的数组的数组名都是一个地址常量,表示数组首元素的地址,不仅仅结构体数组如此。比如:char carr[2];carr的值等于&carr[0]。int iarr[3];iarr的值等于&iarr[0]。
adjective代表数组的首地址。这本身就是个地址。所以你那句scanf不对。另外,字符数组本身不会自动添加字符串结束符\0.这个要特别注意。
数组名可以理解成是一个指针,里面存放的是下标0的元素地址(不是其值)。只不过和一般指针相比,数组名是常量指针不能改变其值。也就是说不能用数组名做++,–这样的运算。
如果是不是传地址,那会在函数中重新定义两个变量分别等于两个参数的值,对新定义的两个变量进行操作。和原来的两个变量无关。 如果是传地址,那就是把两个数的地址传到函数中,对两个地址中的内容进行操作。
C语言关于数组地址的问题
二维数组 2113a[3][4]中,a[1]+1是数组5261a[1]的第2个元素的地址,a[0]+4是数组a[0]的第5个元素的地址,但a[0]只有4个元素,所以a[0]+4就是a[1]首元素的地址,因此4102这是两个不同的地址。
根据功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,无论单一变量还是数组,其内存分配都是如此。
一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址。可以说name就等价于&name[0]。还有一种意思就是指代name整个数组。&name 就是整个数组的首地址。所以name和&name取得的地址是相同的。