鱼C论坛

 找回密码
 立即注册
查看: 3968|回复: 4

为什么编译的时候提示不能读!!

[复制链接]
发表于 2012-8-13 21:00:36 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>
void main()
{
      char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
      char **p;
      int i;
      for( i=0; i < 4; i++ )
      {
            p = name + i;
            printf("%s\n", **p);
      }
}


红色部分,如果一个*的时候可以正常运行。但是两个**的时候为什么就不正常了。。。

最佳答案

查看完整内容

%s是根据字符串首地址输出字符串,需要的参数是指向字符串首地址的指针,*p已经指向字符串首地址了,**p就指向字符了 如果是**p的话只能用%c输出单个字符
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-13 21:00:37 | 显示全部楼层
%s是根据字符串首地址输出字符串,需要的参数是指向字符串首地址的指针,*p已经指向字符串首地址了,**p就指向字符了
如果是**p的话只能用%c输出单个字符
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-14 10:58:15 | 显示全部楼层

char **p;

这句为什么要用两个**,一个不可以吗?有什么区别?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-14 11:16:50 | 显示全部楼层
本帖最后由 the_one 于 2012-8-14 11:18 编辑
342450468 发表于 2012-8-14 10:58
char **p;

这句为什么要用两个**,一个不可以吗?有什么区别?

*p意思是p是指向字符的指针,指向字符串首地址就能找到字符串
而**p意思是p是指向字符串的指针,指向字符串数组就能找到字符串
因为name的定义是字符串数组,所以要实现 p=name+i , 必须要用**p类型才统一
简单地说就是**p是*p的地址,因为name数组就是个地址,必须要再加一层才能找得到
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-14 11:35:38 | 显示全部楼层
%s 会将对应参数看成是char*  就是说 **p是作为一个char* 解释的 第一次循环 **p的值'F' 也就是 70
那么 %s 就会从地址70开始 输出每一个字符直到 遇见'\0'停止 地址70...........  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表