二维数组和数组指针的初始化

清晨灿烂阳光 2010-04-14 11:00:00
1. 二维数组初始化的时候必须在定义里面吗?
比如char m[][4]={"asd","fgh","jkl"};
下面这样行吗?为什么?
char m[][4];
m[][4]={"asd","fgh","jkl"};
2.数组指针怎么初始化?
比如怎么给 int (*p)[4]初始化
谢谢
...全文
515 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanmie_09 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qingchenweiguang 的回复:]
[
谁告诉你可以这样赋值了。
[/Quote]
这样为什么不可以,谢谢你!
[/Quote]
数组(除字符数组外)只有定义的时候可以用{}括起来的值进行初始化。
先定义再赋值的话需要一个一个元素的赋值,可以使用循环来赋值。
字符数组比较特殊,它可以使用strcpy等拷贝函数来赋值.
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qzf368 的回复:]
引用 12 楼 qingchenweiguang 的回复:
[[/Quote]

且不说m[3][4]根本就不是数组m中一个元素,而且元素只能单个赋值
[/Quote]
这是第一个问题的正解,谢谢!!!
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qzf368 的回复:]
引用 7 楼 qingchenweiguang 的回复:
char m[3][4];
m[3][4]={"asd","fgh","jkl"};
也不行

引用 3 楼 qzf368 的回复:
1、如char m[3][4];就可以


我是说可以这样定义,哪有这样赋值的?建议看一下书吧
[/Quote]
谢谢,我知道不可以,但是为什么?
qzf368 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qingchenweiguang 的回复:]
[
谁告诉你可以这样赋值了。
[/Quote]
这样为什么不可以,谢谢你!
[/Quote]

且不说m[3][4]根本就不是数组m中一个元素,而且元素只能单个赋值
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
[
谁告诉你可以这样赋值了。
[/Quote]
这样为什么不可以,谢谢你!
qzf368 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qingchenweiguang 的回复:]
char m[3][4];
m[3][4]={"asd","fgh","jkl"};
也不行

引用 3 楼 qzf368 的回复:
1、如char m[3][4];就可以
[/Quote]

我是说可以这样定义,哪有这样赋值的?建议看一下书吧
pengzhixi 2010-04-14
  • 打赏
  • 举报
回复
char a[3][4];
for(int i=0;i<3;++i)
for(int j=0;j<4;++j)
a[i][j]='a';一个个赋值吧。
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
大家好,我是楼主,那里写错了,引起了大家的误解,我想说的是
char m[3][4];
m[3][4]={"asd","fgh","jkl"};
为什么不行?
pengzhixi 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qingchenweiguang 的回复:]
char m[3][4];
m[3][4]={"asd","fgh","jkl"};
也不行

引用 3 楼 qzf368 的回复:
1、如char m[3][4];就可以
[/Quote]

谁告诉你可以这样赋值了。
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
char m[3][4];
m[3][4]={"asd","fgh","jkl"};
也不行
[Quote=引用 3 楼 qzf368 的回复:]
1、如char m[3][4];就可以

[/Quote]
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
char m[3][4];也不行啊
[Quote=引用 3 楼 qzf368 的回复:]
1不是说二维数组初始化的时候必须在定义里面,而是在你的行数没有写的时候编译器要通过初始化的值确定

你的行数。如果你不想定义的时候初始化,那就必须把行数固定,如char m[3][4];就可以
[/Quote]
huanmie_09 2010-04-14
  • 打赏
  • 举报
回复

#include<stdio.h>

int main()
{
char m[][4]={"asd","fgh","jkl"}; /*只能初始化的时候这样使用*/
char (*p)[4]; /*数组指针*/
int i = 0;
p = m; /*指向二维数组*/
for(i = 0; i < 3; i++) {
printf("%s\n", p+i);
}
}
清晨灿烂阳光 2010-04-14
  • 打赏
  • 举报
回复
为什么不行?全赋值为0是什么意思?
[Quote=引用 1 楼 zhoutanliang 的回复:]
1、不行


C/C++ code
char m[][4];
m[][4]={"asd","fgh","jkl"};//这个意思是赋值




2、逐个初始化

也可以


C/C++ code

int (*p)[4] = {0};//全部赋为0值
[/Quote]
qzf368 2010-04-14
  • 打赏
  • 举报
回复
1、不是说二维数组初始化的时候必须在定义里面,而是在你的行数没有写的时候编译器要通过初始化的值确定

你的行数。如果你不想定义的时候初始化,那就必须把行数固定,如char m[3][4];就可以

2、这个初始化的写法我不清楚,你试试 int (*p)[4] = m
pengzhixi 2010-04-14
  • 打赏
  • 举报
回复
1.不行
2.int(*p)[4]=0;
p是一个指针,指向一个含有4个int类型的数组。
或者这样 int a[4]={4,3,2,1}; int(*p)[4]=&a;
  • 打赏
  • 举报
回复
1、不行

char m[][4];
m[][4]={"asd","fgh","jkl"};//这个意思是赋值



2、逐个初始化

也可以


int (*p)[4] = {0};//全部赋为0值
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhoutanliang 的回复:]
1、不行


C/C++ code
char m[][4];
m[][4]={"asd","fgh","jkl"};//这个意思是赋值




2、逐个初始化

也可以


C/C++ code

int (*p)[4] = {0};//全部赋为0值
[/Quote]

为了这20分抢的头破血流。哥竟没分

简单的东西说那么复杂

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧