c语言中二维数组按行还是按列存储啊
发布时间:2025-05-14 02:36:18 发布人:远客网络
一、c语言中二维数组按行还是按列存储啊
1、在c语言里二维数组元素在内存中是按行存放的。
2、二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
3、LOC(a[i][j])= LOC(a[p][q])+((i− p)* n+(j− q))* t;
4、按“列优先顺序”存储时,地址计算为:
5、LOC(a[i][j])= LOC(a[p][q])+((j− q)* m+(i− p))* t;
6、存放该数组至少需要的单元数为(m-p+1)*(n-q+1)* t个字节。
7、以整形为例,row为行数,col为列数
8、int**data;//存储二维数组的指针(指向指针的指针。date=x[0][0]的地址。这样标会更好。因为sizeof(date)结果为4不可能存下二维数组)。
9、data[0][0]= 5;//将二维数组1行1列(C++中称为0行0列)赋值为5
10、delete [] data[i];//此处的[]不可省略
二、c语言中二维数组如何交换行
1、可以直接找到数组对应行的元素,进行交换数据,改变原数组内容。
2、可以定义指针数组指向每行的首地址,交换指针地址,按顺序打印每个指针为首的行数据,得到数据交换效果,原数组内容不变。
我这里用第2种方法给你写了一个,你参考吧。
intnArry[4][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}};
int*p[4],i,j,*psave,index[2];//p[]分别指向每行首地址
printf("\n\n输入2个你要交换的行号:");
scanf("%d%d",&index[0],&index[1]);
printf("第%d行和第%d行调换后的数组为:\n",index[0],index[1]);
for(i=0;i<4;i++)//按顺序打印首地址指针开头的行数字
三、C语言中如何取二维数组的一行(一列)
没有简单的函数或表示方法,只能使用循环输出或者使用数组中的值。
int a[3][3]={1,2,3,4,5,6,7,8,9};
{b[i]=a[n-1][i];printf("%d",b[i]);}
数组b中存储的就是第n行的数据。
1.可以只给部分元素赋初值。当{}中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。
3.如不给可初始化的数组赋初值,则全部元素均为0值。
4.如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。