关于指向指针的指针
发布网友
发布时间:2022-05-22 04:10
我来回答
共3个回答
热心网友
时间:2024-03-06 09:13
首先 回答 第一个问题 当我用*p[0]代替*p[2]时显示的值一样
答 : 首先 你声明的name 是一个指针数组 也就是说 这个数组里面的每一个元素 都是一个指针 他们保存的都是一个地址 这个地址 分别指向{"BASIC","FORTRAN","C++","PASCAL","COBOL"} 用" "声明的字符串 都存储在常量区 每一个指针 都指向 常量区中的 每一个字符串的首地址
所以 p=name+2; 的意思是 p里面存储着 “C++”的首地址
所以*p[0]的意思的给 "C++"的首地址 解引用 所以 就是C 了
*p[2]的意思是 p指向的是"C++"后面的第二个指针指向的地址 就是name[4]存储的地址 也就是
"COBOL"的首地址 所以 *p[2]的值 是“COBOL”中的 C 明白了吧 如果 你把COBOL 中的C 换一个字母 他就变了 都是C 纯属巧合
*p[2] 可以这么写 他的意思是 现在 p已经指向"C++"的首地址了吧 也就是nams[2]了 那么
p[2]=name[2]的地址 +2 也就是 name[4]的的值 那么 再给他 解引用 就是 *p[2]就等于nams[4]地址的值 也就是C 了
现在开始回答补充问题
答:p是指向指针的指针 但是 你用在这 没什么左右啊 一般指向指针的指针 是C中的 而且 一般使用于函数中的 相当于C++中的 引用&操作符 用来在子函数中 改变主函数的值 子函数参数传递的是地址 不是 数据的拷贝 所以用指向指针的指针 你这里面 体现不出这种功能啊 只能体现出P能保存一个指针的地址 不能体现出 他的精华所在
p是应该存储name[2]的地址 *p等于解引用name[2]地址的值 *p=name[2]
p[2]的含义是 *(p+2) 意思 就是 *(name[2]的地址+2) 这回懂了吧
p[2]他就是等于name[4]的值
所有数组中的 "[]"就是等于 *(首地址 + 下标 )追问name[2]的地址+2就是name[4]的地址吧
热心网友
时间:2024-03-06 09:14
*p指向"C++",cout << *p <<endl;输出"C++“,你应该理解对吗?
p[2]即等于"p = p + 2; "然后取"*p"。所以p[2]指向"COBOL"。"*p[2]"是p[2]所指向字符串第一个字符,即为"C"。"*p[0]"是"C++"的第一个字符,刚好也是"C"。"*p[1]"则为"PASCAL"的第一个字符,为"P"。"*p[2]"当然也可以用,虽然风格不是很好读,只要保证你的访问不越界就行。
其他人的回答都是对的。"p=name+2;" 时p已经指向name数组的第三个元素了,即"C++"。"p[2]"又在p的基础上向前移动了2个元素,即指向"COBOL"了。
热心网友
时间:2024-03-06 09:14
p是二级指针。*p是字符指针相当于p[0]。
*p[0]和*p[2]:[]优先级大于*所以p[0]先结合,相当于(p+0)是一个字符指针;再于*结合,就是取第一个字符
*p[0]的“C”是“C++”的C,*p[2]的“C”是“COBOL”的“C”。