字符型 指针数组
各位大佬,救救救{: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)
数出来的是什么呀 助けてください ありがとうございます 本帖最后由 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",这样的话,你所看到的就不是字符本身,而是它的字符编码值了。
jackz007 发表于 2020-12-13 11:52
内存里放入了这些东西,p 作为指针,只是记录了存放这些东西的内存地址(其实就是一个整数值), ...
printf("%s ",p);
请问那 这个什么意思呀 读出字符串地址吗,不是读出字符串?{:5_104:} 本帖最后由 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 个字符串 jackz007 发表于 2020-12-13 12:17
p 是指针数组,和一般的数组是一样的,只不过它的每一个元素都是指针,指向一个内存地址,比如, ...
那所以 %s 相当于通过起始地址p 来读取字符串嘛
%c,*p 相当于读取字符串第一个字符吗
我可能表达不太清楚{:5_104:} 万千只cnm 发表于 2020-12-13 12:44
那所以 %s 相当于通过起始地址p 来读取字符串嘛
%c,*p 相当于读取字符串第一个字符吗
我可能 ...
是的,"%s" 会从一个内存地址开始向后逐一读取字符元素,直到读到 '\0' 为止。"%c" 会把一个一字节整数作为字符编码显示成字符。 char *p 是指定义了3个字符数据的指针。。 每个指针相当于字符串。 Dadong丶 发表于 2020-12-13 14:29
char *p 是指定义了3个字符数据的指针。。 每个指针相当于字符串。
为什么相当于字符串呢
不是指向地址嘛 万千只cnm 发表于 2020-12-13 19:24
为什么相当于字符串呢
不是指向地址嘛
定义了三个字符数据的指针,, 每个指针 都指向第一个字符的地址,'\0'结束。 所以,每个相当于一个字符串。
页:
[1]