万千只cnm 发表于 2020-12-13 11:35:03

字符型 指针数组

各位大佬,救救救{:5_104:}
看了小甲鱼的视频,
指针数组不是储存的是地址嘛
char *p[];
储存的是字符型指针变量,为什么能输入中文呢,还能打印出来,想了一晚上没搞懂{:9_226:}



#include <stdio.h>
int main()
{
    char *p={
      "为什么呀",
      "为什么能输入中文嘛",
      "char 指针变量"
    };
    for(int i=0;i<3;i++)
    printf("%s ",p);
    printf("\n");
}

另外   我换成
printf("%c",*p)
数出来的是什么呀

万千只cnm 发表于 2020-12-13 11:36:39

助けてください ありがとうございます

jackz007 发表于 2020-12-13 11:52:05

本帖最后由 jackz007 于 2020-12-13 12:12 编辑

    char *p={
      "为什么呀",
      "为什么能输入中文嘛",
      "char 指针变量"
    };
       内存里放入了这些东西,p 作为指针,只是记录了存放这些东西的内存地址(其实就是一个整数值),以便可以通过 p 来访问到字符串数组中的每一个字符串和字符元素。
       就好比在 12000000 存储单元中存放了这些字符串数组,当需要使用的时候,你不得到内存的 120000000 单元去取这些东西呀,是的,在这里,p 的值就是 12000000,这就是 p 的作用和存在意义。

       p 是拥有 3 个元素的指针数组,里面储存了 3 个指针,分别指向 3 个字符串的开头,所以,我们可以通过 p、p、p 分别访问到三个字符串,p 是内存地址,那么 * p 所表达的自然就是第一个字符串中的第一个字符。这个字符在 printf() 中,得通过格式描述符 "%c" 才能把它显示成字符。当然,这就意味着你也可以选择用 "%d",这样的话,你所看到的就不是字符本身,而是它的字符编码值了。

万千只cnm 发表于 2020-12-13 12:11:17

jackz007 发表于 2020-12-13 11:52
内存里放入了这些东西,p 作为指针,只是记录了存放这些东西的内存地址(其实就是一个整数值), ...

printf("%s ",p);
请问那 这个什么意思呀 读出字符串地址吗,不是读出字符串?{:5_104:}

jackz007 发表于 2020-12-13 12:17:24

本帖最后由 jackz007 于 2020-12-13 12:20 编辑

万千只cnm 发表于 2020-12-13 12:11
请问那 这个什么意思呀 读出字符串地址吗,不是读出字符串?

      p 是指针数组,和一般的数组是一样的,只不过它的每一个元素都是指针,指向一个内存地址,比如,p 中保存的就是指向第一个字符串 "为什么呀" 起始地址的指针;p 中保存的就是指向第二个字符串 "为什么能输入中文嘛" 起始地址的指针,凡此类推。
      所以,才可以通过
      for(int i = 0 ; i < 3 ; i ++) printf("%s " , p) ;
      打印输出 3 个字符串

万千只cnm 发表于 2020-12-13 12:44:11

jackz007 发表于 2020-12-13 12:17
p 是指针数组,和一般的数组是一样的,只不过它的每一个元素都是指针,指向一个内存地址,比如, ...

那所以 %s      相当于通过起始地址p 来读取字符串嘛
%c,*p   相当于读取字符串第一个字符吗
我可能表达不太清楚{:5_104:}

jackz007 发表于 2020-12-13 12:52:33

万千只cnm 发表于 2020-12-13 12:44
那所以 %s      相当于通过起始地址p 来读取字符串嘛
%c,*p   相当于读取字符串第一个字符吗
我可能 ...

      是的,"%s" 会从一个内存地址开始向后逐一读取字符元素,直到读到 '\0' 为止。"%c" 会把一个一字节整数作为字符编码显示成字符。

Dadong丶 发表于 2020-12-13 14:29:35

char *p    是指定义了3个字符数据的指针。。 每个指针相当于字符串。

万千只cnm 发表于 2020-12-13 19:24:04

Dadong丶 发表于 2020-12-13 14:29
char *p    是指定义了3个字符数据的指针。。 每个指针相当于字符串。

为什么相当于字符串呢
不是指向地址嘛

Dadong丶 发表于 2020-12-13 21:42:50

万千只cnm 发表于 2020-12-13 19:24
为什么相当于字符串呢
不是指向地址嘛

定义了三个字符数据的指针,, 每个指针 都指向第一个字符的地址,'\0'结束。 所以,每个相当于一个字符串。
页: [1]
查看完整版本: 字符型 指针数组