c语言不用strcpy复制字符串,C语言,这题D吧,因为字符串复制只能用strcpy函数,就是strcpy(str[1],"gues...

你把数组名和指针混淆了。

数组名和指针,使用形式上,除了数组名不允许被赋值以外,其他形式是完全相同的

根本上来讲,数组名不仅不许被赋值,就连类型名都不同。

int a[4],*p;

p=a;

从p=a执行完毕以后,任何时候,用随时可以把a和p进行替换(例外就是p可以被赋值,a不行)

但是,a的类型是int [4],p的类型是int*。

如果是应付考试的话,类型不同这段不用考虑了。

===========================

确实选D

str[1]是数组名,下属10个元素,对应str[1][0]~~str[1][9],数组名,不许被赋值

更多追问追答

追问

哦,这个字符型的二维数组,它的str[0],str[1],str[2]是每一行的行指针,比如str[1]这个行指针,就指向str[1][0]~str[1][9]这10个元素它也是这10个元素的数组名,它是常量,不能被赋值,而不能简简单单的认为它是一个char型的,即使是int型的也不能这样做是吧

那我要是想让str[1]这个字符串指向“guest"这个串,应该怎样写呢?

追答

停停停停停

行指针?谁告诉你二维数组中一维形式是行指针的?

行指针,行指针,看名字就知道那是指针变量,能赋值的。

我就说你把数组名和指针混淆了

char str[3][10]

定义是数组str,具有三个元素,这三个元素的名字分别是str[0]、str[1]、str[2],类型都是char [10],而通过类型是char [10]这一点看得出,str[0]、str[1]、str[2]虽然是数组元素,但本质上依旧是一个数组名。

这里我刻意忽略了一维二维的称呼。

str[0]、str[1]、str[2]是数组名,不是指针,str也不是指针,也是数组名

关于行指针,最后说一句,既然名字都叫行指针了,char型的行指针,定义时的类型名必然是char *[],你这个题4个选项里面,就没有一个是行指针的。

追问

嗯嗯

行指针只能是str+0 str+1 str+2咯

str[0] str[1] str[2]是每行的数组名 它是常量

它指向每个首元素的首地址?

追答

差不多。

很多人把指针和指针变量混淆了。指针就是地址编号,内存中每个字节的编号,同时还要考虑其类型。指针变量是用来存储指针的变量,二级指针看名字高大上,其本质依旧是个存储指针的变量,只不过要求必须是一级指针变量的指针,也就是一级指针变量的地址。

str+0 str+1 str+2是指针,指向二维数组每“行”起始位置,同时数值每次+1,都是移动二维数组的一整“行”

同时 char (*q)[10]是行指针变量,每次+1,移动10个char型,对应D选项中的数组,也是一“行”

str[0] str[1] str[2]是一位数组名,不是指针,虽然用法上跟指针几乎没区别,但数组就是数组,类型名上就看得出,根本不一样。但他们三个指向每行的首元素,值是每行首元素的首地址。之所以这么说,是因为考虑到二维数组不仅有char,还有int等其他最低级元素所占字节数大于1的类型。

还有,我上面说的行都是加引号的,因为二维数组的本质是一种特殊的一维数组

一般课本上关于二维数组都会给两种图示画法,一种是二维表格形状的,这种读程序读起来方便,另一种是一字长蛇阵形式的,这种才是c眼中的二维数组,结合我下面这段话理解就明白了。

int a[3],这很明确不用说了

int a[3][4],也相当明确,定义了数组a,有3个元素,每个元素类型是int [4]也就是4个int构成的一维数组。

温馨提示:答案为网友推荐,仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值