本文目录一览:
- 1、在C语言中定义二维数组long a[3][5],则数组占多少字节的存储空间?
- 2、C语言数组中为什么写a[5]={0},这样写对吗?不是说方括号里面的数字和花括号里面的元素个数相同
- 3、c语言,二维数a,大小为3*5
- 4、在C语言中,数组a[5],数组名a可以a++吗
在C语言中定义二维数组long a[3][5],则数组占多少字节的存储空间?
c语言中long占4个字节,所以longa[3][5]占4*3*5=60个字节
从元素角度理解a代表a[0][0];从二维数组理解a代表a二维数组名,即二维数组首地址;从一维数组角度理解a代表a[0]即二维数组第一行看作一个一维数组,a[0]为这个一维数组的首地址;
a[1]从二维数组看代表a[1][0]是元素,从一维数组角度看代表二维数组第二行的首地址和上面a[0]一样,
C语言数组中为什么写a[5]={0},这样写对吗?不是说方括号里面的数字和花括号里面的元素个数相同
a[5]={0}这种写法是对的,C语言对数组初始化的值个数可以少于数组元素个数,当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。
c语言,二维数a,大小为3*5
首先明确概念:
a为二维数组名,此数组有3行5列, 共15个元素。
但也可这样来理解,数组a由三个元素组成:a[0], a[1], a[2]。
而它们中每个元素又是一个一维数组, 且都含有5个元素。
a代表二维数组的首地址。也是二维数组第0行的首地址。
所以 a[2]和a+2都是二维数组第2行的首地址。//---------------------你的问题1,2
在二维数组中,我们还可用指针的形式来表示各元素的地址。所以a[0]=*(a+0);
所以*(a+2)也是a[2]即二维数组第2行的首地址 ///---------------------------你的问题3
根据以上推论:
*(*(a+2)+3) == *(a[2]+3)即在第2行首地址上偏移3,那么就是a[2][3]的值 //--------你的问题4
(2)如果输出a和a[0]的值是否相等,为什么,各代表什么含义。
由上:a代表二维数组的首地址。也是二维数组第0行的首地址。
可得,如果输出他们的值,是一样的。
在C语言中,数组a[5],数组名a可以a++吗
不能。因为变量指针可以递增,而数组不能递增,数组可以看成一个指针常量。代码修改:
#includestdio.h
int main(void)
{
int array[5]={2,4,5,23,5};
int *p,i;
p=array;
printf("请输入是五个数:\n");
for(i=0;i5;i++)
scanf("%d",array[i]);
printf("\n");
printf("输出五个数:\n");
//for(i=0;i5;i++)
printf("%d\n",*(p++));
}
扩展资料:
指针运算
1、指针变量加/减一个整数
例如:p++,p--,p+i等。
C语言与C++语言规定,一个指针变量加/减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减。这样就保证了p+i指向p下面的第i个元素。
2、指针变量赋值
C语言与C++语言规定,可以将一个变量或一个函数的入口地址赋值给相应的指针变量。
例如(假设p是相应的指针):
p=a;
p=max;(max为已经定义的函数)
3、指针变量相减
如果两个指针变量指向同一个数组的元素,则两个指针变量之差是两个指针之间的元素个数。
注意,指针变量相加无实际意义。
4、指针变量比较
如果两个指针变量指向同一个数组的元素,则可以进行比较。指向前面元素的指针变量小于指向后面元素的指针变量。
参考资料:
百度百科-指针运算