❶ c语言多维数组
&multi[0]不等于multi[0],
multi也不等于multi[0],
multi[0]是一维指针。
multi是一个二维指针。
multi[0][0]表示一个具体的int值。
你用%u输出的结果实际上都是输出了multi[0][0]的值。
❷ 求C语言关于多维数组的详细讲解,急!!!
每一个[]代表一个方向 当然三维以上的数组不太容易用实体模式想象 但大概方式是一样的
先搞明白1 2 3维对应于下标的方式 指针 地址的对应关系
比如对于int a[2][3][4]而言
a[1] a[1][1] a[1][1][1] a[1][1][3] a[1][2][0]
搞清以上几项的地址关系
组数基本我们可以按行读来理解[具体对应于代码]
即 1维 从左向右读
2维 a[2][3] 从左向右工a[][0]~a[][2] 3格 成为一行 每一行对应一个a[]
三维a[4][2][3]的在此基础上增加到4个层面 (原来的2维对应为2*3格的一个面)
❸ 关于c语言多维数组问题
我很赞同你的理解,你学得挺扎实。你的3个问题都很好👍👍
下面只是我个人的一些看法:
1、关于二维数组的表示方式,c语言从没有见过a[0..m][0..n]这种表示方法,因为语言本身的原因,造成a[m][n]数组不含有a[m][n]这个元素,很奇特吧!所以明确的表达方式是:int a[m][n],但其下标却是0...m-1和0...n-1。那么,a[0..m][0..n]是否就代表(m+1)行(n-1)列数组呢,若是,你的三个问题都是肯定的结果。
2、如果a[0..m][0..n]与int a[m][n]等价呢?这不是没有可能的,因为没有规定不能这样表示。这样的话,你的三个问题都是否定的结果。而且选项A是正确的。
3、造成这种情况的根本原因,是这本书使用了不严谨的表达方式,看起来不像是印刷错误,应该是编书人的失误。
❹ C语言中二维数组的列总数是什么意思
一般是说总列数,没盯大有列总数一说,总列数就是最大好带的列数,具体算的时候用
sizeof(c)/sizeof(c[0])得到行友则芦数,
用sizeof(c[0])/sizeof(c[0][0])得到列数
❺ C语言 代码 求解 多维数组和指针。
首先:
应该明确定义,对于int (*p)[3] 定义,是说:p是一个指针(*p) ,该指针指向了拥有三个元素的数组,(*p)[3] ,数据类型为int,int(*p)[3] 定义完成。(在此说明,应注意C中运算符的优先级. (*p)[3] 和 *p[3] 是有很大区别的)。
其次:
int (*p)[3]=a;目的是将a数组的地址赋予p,即指针p指向了a。
再次:
*(*(p+1)+1))表达式应该分层看。最内层p+1是说"向前指向增加1",因为p是指向了拥有三个元素的数组,所以*(p+1)的实际指向是a中的第3个元素(从0算起)的地址,*(p+1)+1又是向前增加1的指向,即a中的第4个元素,*(*(p+1)+1) 取其值,为5.
第四:
上面解释可以这样看,a[2][3]可以这样理解,它的布局为:
1 2
3 4
5 6
而p指向了a, p 对a的做如下解析:
p -> 1 2 3
(p+1) -> 4 5 6
所以明白了,指针从内存的观点没什么特别的,只是记录了一个地址。p只是记录了a的首地址。至于p定义为int (*p)[3] ,是教编译器如何解释某个内存地址中的内容和大小。
最后,应该说明,在C中实际不存在真实多维数组,都是线性分布于内存中。
❻ c语言 怎样用程序知道二维数组行数和列数
比如桐裤有这样一个二维数组: int a[3][5];
求数组元素的总数: sizeof(a) / sizeof(int)
求数组毕察列数局数简: sizeof(a[0])/sizeof(int)
而数组行数则为 :( sizeof(a) / sizeof(int) )/ ( sizeof(a[0]) / sizeof(int) )
不知道你明白了么?
❼ 怎样用C语言编程计算二维数组每一行和每一列数的和 麻烦测试好了发我哈!感激不尽!
#include<iostream>
float score[5][6] = { 91, 79, 83, 92, 85, 80,
95, 72, 81, 90, 86, 82,
96, 80, 90, 92, 84, 88,
88, 80, 78, 86, 84, 80,
77, 76, 86, 88, 80, 85 };
void main(void){
float sum1[5] = {0,0,0,0,0};//行的和
float sum2[6] = { 0, 0, 0, 0, 0 ,0};//列的和
for (int i = 0; i < 5; i++){
for (int j = 0; j < 6; j++){
sum1[i]+= score[i][j];
}
printf_s("%f\n",sum1[i]);
}
printf_s("\n");
for (int i = 0; i < 6; i++){
for (int j = 0; j < 5; j++){
sum2[i] += score[j][i];
}
printf_s("%f\n", sum2[i]);
}
getchar();
}
❽ C语言编写程序,生成10行10列二维数组,分别求其每行和每列的和
这么多的答案都不采纳,实在等我的吗。输出10行10列的数组,计算各行列的和。
#include<stdio.h>
voidmain()
{
inta[10][10];
inti,j,sum;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
a[i][j]=(int)rand()%100;
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
printf("%5d",a[i][j]);
printf(" ");
}
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<10;j++)
sum+=a[i][j];
printf("第%d行和为:%d ",i+1,sum);
}
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<10;j++)
sum+=a[j][i];
printf("第%d列和为:%d ",i+1,sum);
}
}
❾ c语言中如何获取一个二维数组的行列数
有两种方式:
1 二维数组的行列数在定义的时候就是确定好的,所以编程人员是知道二维数组的大小以及行列数的。 所以可以直接使用行列数的值。
为方便维护,可以将行列数定义为宏,直接调用对应的宏名作为行列值。
2 动态获取。
对于type array[A][B];形式的二维数组,可以通过计算sizeof获取行列数。
sizeof(array[0][0])为一个元素占用的空间,
sizeof(array[0])为一行元素占用的空间,
sizeof(array)为整个数组占用的空间,
于是:
行数 = sizeof(array)/sizeof(array[0]);
列数 = sizeof(array[0])/sizeof(array[0][0]);
❿ C语言多维数组地址计算请举例说明
一、多维数组地址的表示方法
设有整型二维数组a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。 数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a [0]等效的, 它表示一维数组a[0]0 号元素的首地址。也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a [0][0]是相等的。同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。 &a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。
C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也可以看成是a[0]+0是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。由a [i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。该元素的值等于*(*(a+i)+ j)。
试一下以下程序段
#define PF "%d,%d,%d,%d,%d,\n"
main(){
static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
printf(PF,a,*a,a[0],&a[0],&a[0][0]);
printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);
printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);
printf("%d,%d\n",a[1]+1,*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}