问题:关于指针数组的使用
在使用指针数组的过程又一些疑问不理解,希望求助大佬给予帮助
问题描述:
#include <stdio.h>
int main(void)
{
char str_01[] = {"《C程序设计》"}, str_02[] = {"《算法与数据结构》"};
char *p; // p 是一个拥有两个元素的指针数组
p = str_01;
p = str_02;
for(int i = 0; i < 2; i++)
{
printf("第%d本书:%s\n", i+1, *(p+i));
}
return 0;
}
`(p+i)` 表示数组的第i元素,`*(p+i)` 表示解引用数组的第i元素的地址。但是让我困惑的一点是 `(p+i)` 不就是 str_01数组的地址吗,为什么还要解引用? 本帖最后由 jhq999 于 2023-2-25 12:46 编辑
p+0是存有str_01数组地址值的指针
p+1是存有str_02数组地址值的指针
*(p+i)等价于p jhq999 发表于 2023-2-25 12:43
p+0是存有str_01数组地址值的指针
p+1是存有str_02数组地址值的指针
对于数组的地址在打印输出时,不是可以直接使用其地址。例如
printf("%s\n", str_01);
既然可以直接使用数组的地址,那么在指针数组的引用就可以
printf("%s\n", p+i);
不知道我这样的理解是否正确? cjgank 发表于 2023-2-25 12:50
对于数组的地址在打印输出时,不是可以直接使用其地址。例如
第一个部分错误,第二个正确。
第一个说法对于字符数组/字符串来说其实是错误的,这份代码会直接输出整个字符串
但对于其它类型的数组,你的理解是正确的
第二份代码是正确的,它在运行时会输出i位以后的整个字符串
同样的,scanf也可以这么做(仅限字符串)。
有用请设置最佳答案,谢谢。 本帖最后由 jhq999 于 2023-2-25 16:18 编辑
cjgank 发表于 2023-2-25 12:50
对于数组的地址在打印输出时,不是可以直接使用其地址。例如
p=str_01//数组p第1个元素储存着字符串指针str_01的值
p+0=&p//p+0是数组p第1个元素的地址, jhq999 发表于 2023-2-25 16:17
p=str_01//数组p第1个元素储存着字符串指针str_01的值
p+0=&p//p+0是数组p第1个元素的地址,
我明白了
其实指针数组p有五个连续地址的元素,每个元素的值存放一个指针。
(p+i)只是得到第i个元素,要想得到第i个元素的值就还要解引用*(p+i)。
谢谢解答{:10_323:}
页:
[1]