鱼C论坛

 找回密码
 立即注册
查看: 624|回复: 5

[已解决]C语言学到指针,有一些不理解

[复制链接]
发表于 2020-8-3 11:06:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char *p[5] = { "notepad", "calc", "write", "mspaint", "taskmgr" };
        printf("%p,%p,%p\n", p,p[1],*p);

        for (int i = 0; i < 5; i++)
        {
                printf("%s,%c\n", p[i],*p[i]);
        }

请问这里的P[i]和*p[i],是什么意思,为何一个用%s,一个%c来接收。
另外,我查看了内存地址,分别是008b6930 008b693c 008b6944 008b694c 008b6958,为何间隔不是一样大
求大佬们解答一下,万分感谢
最佳答案
2020-8-3 11:24:54
刚刚被审核了?
  1. #include <stdio.h>

  2. int main()
  3. {
  4.    
  5. char *p[5] = { "notepad11", "calc", "write", "mspaint", "taskmgr" };//定义了一个指针数组,实际上就是定义了五个指针
  6.         printf("%p,%p,%p\n", p,p[1],*p);

  7.         for (int i = 0; i < 5; i++)
  8.         {
  9.                 printf("%p,\t", p[i]);//打印指针所指向的单元的地址,因为每个字符串长度不一样,所以地址间隔也不一样,地址间隔就是字符串的长度+1,因为字符串后面会自动添加一个结束字符'\0'
  10.                 printf("%p,\t",&p[i]);//打印指针的地址,指针也是一类变量,也有自己的地址,每个指针的长度就是8字节(与系统有关,64位系统是8字节,32位系统是4字节)
  11.                 printf("%s,\t",p[i]);//%s是打印 字符串,后面需给出字符串的首地址,也就是指针指向的地址
  12.                 printf("%c\n",*p[i]);//*p[i]是指针所指向单元的内容,指针指向了字符串首地址,所以该单元的内容实际上就是字符串的首字母。
  13.         }
  14.     return 0;
  15. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-3 11:24:54 | 显示全部楼层    本楼为最佳答案   
刚刚被审核了?
  1. #include <stdio.h>

  2. int main()
  3. {
  4.    
  5. char *p[5] = { "notepad11", "calc", "write", "mspaint", "taskmgr" };//定义了一个指针数组,实际上就是定义了五个指针
  6.         printf("%p,%p,%p\n", p,p[1],*p);

  7.         for (int i = 0; i < 5; i++)
  8.         {
  9.                 printf("%p,\t", p[i]);//打印指针所指向的单元的地址,因为每个字符串长度不一样,所以地址间隔也不一样,地址间隔就是字符串的长度+1,因为字符串后面会自动添加一个结束字符'\0'
  10.                 printf("%p,\t",&p[i]);//打印指针的地址,指针也是一类变量,也有自己的地址,每个指针的长度就是8字节(与系统有关,64位系统是8字节,32位系统是4字节)
  11.                 printf("%s,\t",p[i]);//%s是打印 字符串,后面需给出字符串的首地址,也就是指针指向的地址
  12.                 printf("%c\n",*p[i]);//*p[i]是指针所指向单元的内容,指针指向了字符串首地址,所以该单元的内容实际上就是字符串的首字母。
  13.         }
  14.     return 0;
  15. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-3 12:10:44 | 显示全部楼层
char *p[5]是一个指针数组,它包含5个char *类型的元素,p[i]是每个元素的首地址,*p[i] 是取出所指地址的内容。详细解释如楼上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 13:48:14 | 显示全部楼层

非常感谢大佬的回答,一下子理解了很多。可是你说的地址间隔是字符串的长度+1,但是我运行的结果不是这样的呀,我用的是VS2013.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 13:48:48 | 显示全部楼层
chxchxkkk 发表于 2020-8-3 12:10
char *p[5]是一个指针数组,它包含5个char *类型的元素,p是每个元素的首地址,*p 是取出所指地址的内容。 ...

谢谢大佬解答,现在懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 10:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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