⑴ c语言中的二维数组的赋值,输入输出怎么用
代码,实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。
int main()
{
int**p;//定义二维指针。
int m,n;//行数和列数。
int i,j;
scanf("%d%d",&m,&n);//输入行数和列数。
if(m<=0||n<=0)return-1;//行数或列数非法。
p=(int**)malloc(sizeof(int*)*m);//申请一组一维指针空间。
for(i=0;i<m;i++)
p<i>=(int*)malloc(sizeof(int)*n);//对于每个一维指针,申请一行数据的空间。
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&p<i>[j]);//输入第i行第j列的数据。其中&p<i>[j]也可以写作p<i>+j或者是*(p+i)+j.功能相同。
printf("输入的数组为%d行%d列: ",m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)//这个循环可以输出一行元素。
printf("%d",p<i>[j]);//输出i行j列的元素。
printf(" ");//每行输入结束加换行符。
}
//释放内存
for(i=0;i<m;i++)
free(p<i>);
free(p);
return 0;
}
(1)c语言二维指针动态赋值扩展阅读:
函数:free
功能:与malloc()函数配对使用,释放malloc函数申请的动态内存。(另:对于free(p)这句语句,如果p是NULL指针,那么free对p无论操作多少次都不会出问题。如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。)
用法;void free(void*ptr);
程序例:
C/C++代码如下:
#include<string.h>
#include<stdio.h>
#include<alloc.h>//or#include<malloc.h>
int main(void)
{
char*str;
/*allocate memory for string*/
str=(char*)malloc(10);
/*"Hello"to string*/
strcpy(str,"Hello");
/*display string*/
printf("String is%s ",str);
/*free memory*/
free(str);
str=NULL;
return 0;
}
⑵ c语言问题,用指针为一个二维数组赋值
ptr=arr;
其实你这样赋值也是可以的,是没有问题的。
因为arr是二维数组的数组名,它(arr)本身就代表这个二维数组的第0行的地址。
问题关键不是出现在这里,而是在你程序的while循环语句中
while(scanf("%f",&ptr+i)&&i!=7)
i++;
你这样写是不对的,首先ptr指向的是一个地址,所以ptr+i也是一个地址,所以这里就不能用变址运算符"&"了。第二个问题是,i从0自加到6,这里面其实有了7个数,明显超过了arr数组的长度,这样是不对的。这个循环还有一个问题就是,这本身就是一个不正常的循环(自己想想为什么)
下面是我帮你改改的代码,希望对你会有帮助。
#include<stdio.h>
voidmain()
{
doublearr[2][3];
double*ptr;
inti=0;
ptr=*arr;//把数组arr第0行第0列的地址赋给ptr,其作用与ptr=arr;相同,
但不建议采用ptr=arr;这样的赋值//
printf("Pleseenter2*3numbers: ");
for(i=0;i<6;i++)
scanf("%lf",ptr+i);//注意不要将ptr+i写成&ptr+i或&(ptr+i),否则出错//
for(i=0;i<6;i++)
printf("%g",*ptr++);
printf(" ");
}
⑶ C语言如何给用函数二维数组动态赋值
1、当成普通数组使用,用for循环即可赋值。
2、例程:
#include
#include
int
main(void)
{
int
*a=NULL;
int
i;
a=malloc(sizeof(int)*10);/*动态创建一个有10个int元素的数组*/
if
(a==NULL)
{
/*a==NULL表示空间分配失败*/
fprintf(stderr,"MEMORY
ERROR");
return
-1;
}
for
(i
=
0;
i
<
10;
i++)
{
a[i]=i;
/*对数组进行赋值操作*/
}
free(a);/*动态分配的空间需要用free()函数释放*/
return
0;
}
⑷ c语言中怎样实现对二维数组元素进行赋值并输出。
可以按照下面步骤进行定义二维数组并输出:
1 定义二维指针。
2 确定数组维数,即行数和列数。
3 申请行数个一维指针大小空间,并赋值给二维指针。
4 对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针。
5 输入或赋值数据。
6 使用双重循环,逐个范围存储单元并输出。
7 逐个释放一维指针上的内存。
8 释放二维指针上的内存。
以整型二维数组为例:
下面的代码,实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。
⑸ C语言指针赋值二维数组问题
iArray[i][i],试试看吧,如果不行就换一种写法,直到调试成功为止,一般需要多练习和实践的编程语言习题,需要多思考,多练习,多交流才能提高水平。
⑹ c语言二级指针赋值问题
首先,你理解的没错。
b和a都指向了同一块内存。
这块内存的内容是61
62
63
00
41
42
43
00
31
32
33
00
a[0]这个指针,我们知道这个指针是一个指向四个字符的字符串,所以可以得到它的值是abc\0,即61
62
63
00
而对于d指针,我们仅仅知道它是一个二维的指针,并不知道它第一维的空间是多大。于是取里面的值当作一个指向char的一维指针,一个指针占4个字节,按低位往高位存储。你可以这样理解,假设有一个char
*
pchar
=
d[0],那么
pchar的就是固定的,是一个指向0x00636261的指针。这就是你看到
"\0cba"了。
⑺ C语言如何给指针数组动态赋值
可以试试再创建一个char类型的二维数组,如char
temp[16][16],然后分别把temp[0
...
15]的每一个元素temp[...][0...14]赋上'a'
+
随机数值(0
~
25的)。再把temp[...][15]赋值为'\0'。最后把str[0...15]分别指向temp[0...15]