读书人

指针与字符串数组的简单有关问题多

发布时间: 2012-02-15 12:09:44 作者: rapoo

指针与字符串,数组的简单问题,谢谢大家
请看:
char *str;
str= "good ";
上面的语句是对的,我想问的是,既然str是一个指针,怎么可以给它赋常量?

还有一个问题:
数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址。
对与这段话中“*(a+0)或*a是与a[0]等效的”我不理解,*是取内容符号,也就是说
*(a+0)或*a应该是a[0][0]的内容才对啊,而a[0]是第0行的首地址啊,它是一个地址,为什么会与*(a+0)或*a等效呢? 如下
*(a+0)或*a 数组具体内容
a[0] 地址

最后一个问题:
一维数组的下标,如b[0],b[1]等是指针吗?不然是什么?

[解决办法]
1.既然str是一个指针,怎么可以给它赋常量?
//////////////////////////////////////////////////
char *str;
str= "good " ;//将字符串 "good "的首地址赋给str


2.*(a+0)或*a应该是a[0][0]的内容才对啊,而a[0]是第0行的首地址啊,它是一个地址,为什么会与*(a+0)或*a等效呢? “ *(a+0) 或 *a 是与 a[0] 等效的
////////////////////////////////
举个例子,对于二维数组int a[3][3]
首先,*(a+0) 或 *a 是与 a[0] 等效的
a[0]表示的是一个行指针
*(a+0)可以看作取内容,相当于int a[3][3]中第二维装的是指针int *a[3];所以它取的还是地址
*a也就相当于取int **a的内容,里面装的是(装三个行指针的 )数组的地址,取的就是这个地址

3.一维数组的下标,如b[0],b[1]等是指针吗?不然是什么?
//////////////////////////////////////////////////////
不是指针是元素,一维数组取内容也就是它所指向的内容了



[解决办法]
1.既然str是一个指针,怎么可以给它赋常量?

这个是c语言的历史遗留问题
[解决办法]
char *str = "good "; //其实str就是常量指针

a是二维数组名 //那么*a是指针,而*(*a)才是内容

b是一维数组名 //那么b[0]是内容

最后要说明一点,其实内容也可以是指针,甚至可以是任何你期望的东西

看来你才学C语言吧.

读书人网 >C语言

热点推荐