作业帮 > 综合 > 作业

char** names; 表示什么意思?names 是数组吗?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/16 13:51:09
char** names; 表示什么意思?names 是数组吗?
char names 表示定义一个名为names 的char 字符型变量 如 names = 'A'
char *names 表示定义了一个的字符型的指针变量,可以指向字符串等
如:
char str[] = "123456"; names = str; 可以用names[i] 表示 str[i]
char **names 表示定义了一个指向指针的指针,names 里面装的是 地址 的 地址
比如:
char *str[] = {"123","456"}; names = str;
str[0] 里面装的是“123”的地址 = names[0]
*names[0] = '1'
再问: 第三部分没看明白。 names[0] 也是指针吗?指针可以用这种数组的表达形式吗? 如果如你所说,str[0] 里面装的是“123”的地址成立的话 ,那么 *names[0] 怎么不是'123' ?
再答: char *str[] = {`````}是定义了一个指针数组 ,{} 里面放的是一个个字符串 如:{"123","456"} 指针数组的元素里面放的不是真正的数组元素,而是他们的首地址! str[0] 里面是“123”的首地址 str[1] 里面是“456”的首地址 而 str 又是 str[0],str[1]所在字符串的地址!也就是指针的指针了 所以有 names = str 所以names[0] = str[0] 当然是“123”的首地址了。 *names[0] = *(names[0]+0) = names[0][0] = *str[0] = *(str[0] + 0)就是str[0] 这个字符串的第一个字符了 *(names[0] +1) = *(str[0] + 1) = '2' *(names[0] + 2) = '3' 这几种形式是无条件等价的: names[0][0] = *(names[0]+0) = *(*(names+0)+0) 你可以再去看看二维数组和指针那部分,多上机试试。