1. 二维数组取值问题
二维数组要访问其中的每个字符只要给出对应的行号i和列号j就可以了string[i,j],类似于你的座位是在第i排第j列一样。至于你说的提取每一个i和j代表的字符的话,应该是每个i和j的组合所代表的字符把。要是分别代表的字符的话,对于i(行)string[i]是二维数组第i行的首地址,要硬是要得到i所代表的字符就只能是*string[i]了,得到的只是各行的首个字符;对于j(列)怎么想都想不出有个什么样的方法来理解这个j代表的字符了。
2. 求教c语言,用指针逆序数出二维数组的元素!!!十二个数就行了。
#include<stdio.h>
voidmp(int*a,intc,intl)
{
int*p=a+l*c-1;
inti,j;
for(i=0;i<c;i++)
{
for(j=0;j<l;j++)
printf("%d",*p--);
printf(" ");
}
}
intmain()
{
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
mp((int*)a,3,4);
return0;
}
3. 用C++编写程序:利用指向数组元素的指针变量访问二维数组的各个元素,并按逆序输出各元素的值.
#include<stdio.h>
int main()
{
int a[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
for(int i = 3; i>=0; i--)
for(j=2;j>=0;j--)
{
printf("%d ",a[i][j]);
return 0;
}
4. 给以下二维数组倒序: int a[2][3]={1,2,3,4,5,6}
#include<stdio.h>
int main()
{
int a[2][3]={1,2,3,4,5,6},t;
for(int i=0;i<3;i++)
{
t=a[0][i];
a[0][i]=a[1][2-i];
a[1][2-i]=t;
}
for(int m=0;m<2;m++)
for(int n=0;n<3;n++)
{
printf("%2d",a[m][n]);
if(n==2)
printf("
");
}
return 0;
}
附运行结果
5. 二维数组题 讲下题按列逆序访问怎么做
其实很简单,
你的编程思想是这样的:
用FOR循环循环读取二维数组,
先循环行,然后循环列,
第一行,循环你的列的个数次数,
一次类推,
如果你想逆运算访问就让你的行的值为最大,
你的列的值也为最大,
一次减小就行啦!
我是学JAVA的,
你的用C写的我不是太懂,
但是思想是相同的,
自己思考下吧!!
o(∩_∩)o...
o(∩_∩)o...
6. 二维数组题 讲下题按列逆序访问怎么做
#include “stdio.h"
#include "stdlib.h"
void funB(int t[3][4])
{ int i,j;
for(i=0;i<4;i++)
{ for(j=0;j<3;j++)
printf("%3d",t[i][j]);
printf("\n");
}
}
main()
{ int xx[3][4],i,j;
for(i=2;i>=0;i--)
for(j=3;j>=0;j--)
xx[i][j]=rand()%90+10;
funB(xx);
}
7. c语言二维数组
这个就是指针数组和数组指针的区别了,我当年也在这里转了很久,希望我下面所说得可以帮到你。
首先,明确编译器是怎么识别*s[]和(*s)[]两种形式的代码的。对于*s[],编译器会以默认的右结合的方式进行识别,所以首先识别s[],这是一个数组,然后再识别*,说明这个数组的元素都是指针。所以最后的结果就是:这是一个“以指针为元素的数组”,简称指针数组。而对于(*s)[],由于()的优先级高于*,所以编译器会先识别()里面的,也就是先识别*s,所以它是一个指针,然后()说明这个指针指向的是一个数组,所以最后的结果是:这是一个“指向数组的指针”,简称数组指针。
好吧,我承认一点,就是这两个东西看起来复杂,但是其实用起来区别不大,最本质的东西就是,指针数组用到多个指针,数组指针就完全是一个指针跑天下。
看下面一段代码(我偷懒用C++写的,反正这个不是重点):
#include
using
namespace
std;
int
main()
{
//指针数组
*a[2]
int
t1[3]
=
{0,1,2};
int
t2[3]
=
{3,4,5};
int
t3[3]
=
{6,7,8};
int
*a[3];
a[0]
=
t1;
//一个指针赋值
a[1]
=
t2;
//第二个指针赋值
a[2]
=
t3;
//第三个指针赋值
//数组指针
(*b)[3]
int
(*b)[3]
=
new
int[3][3];
for(int
i=0;i<3;i++)
for(int
j=0;j<3;j++)
*(*(b+i)+j)
=
i*3+j;
//一个指针跑天下
cout
<<
*((*b)+1)
<<
"
"
<<
*(*(b+1))
<<
endl;
system("pause");
return
0;
}
最后我想说,其实这个做题的时候有用,自己写的时候还是尽量直接用int[n][m]的方式比较方便,稍微浪费点空间问题不大,重要的是看起来好看,不容易出错。
8. 关于二维数组arr[m个行,n个列],中arr[i,j]的地址问题
首先,纠正题目中的一个错误:
m行n列的二维数组,arr[0,0]意味着行、列下标的开始均为0,那么行值应该是0..m-1,列值应该是0..n-1。故arr[i,j]后的(i<=m&&j<=n)是错误的,只能是(i<m&&j<n)。
a[i,j]表示i行j列的元素。按行优先存储的话,a[i,j]之前的i (0..i-1)行全满,故有i*n个元素。在i行里,排在a[i,j]之前有j (0..j-1)个元素。两者相加,a[i,j]是在a[0,0]之后的(i*n+j)个元素。
9. 有二维数组{{1,2,3},{4,5,6},{7,8,9}}编写一个程序,通过指针移动,先按顺序输出数组,再按逆序输出数组
#include<stdio.h>
int main(int argc, char* argv[])
{
int y[][3]={{1,2,3},{4,5,6},{7,8,9}};
int (*p)[3]=y;
int i,j,*q=&y[2][2];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",*(*(p+i)+j));
printf("\n");
}
printf("\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",*q--);
printf("\n");
}
return 0;
}