首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-15 
指针与字符串,数组的简单问题,谢谢大家请看:char*strstr good 上面的语句是对的,我想问的是,既然str

指针与字符串,数组的简单问题,谢谢大家
请看:
          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语言吧.

热点排行