带你学C e23的一个问题
#include <stdio.h>int main()
{
char *p1 = {
"让编程改变世界 -- 鱼C工作室",
"Just do it -- NIKE",
"一切皆有可能 -- 李宁",
"永不止步 -- 安踏",
"One more thing... -- 苹果"
};
int i;
for (i = 0; i < 5; i++)
{
printf("%s\n", p1);
}
return 0;
}
甲鱼的代码如上, s1e23的指针数组,甲鱼明确写到指针数组是一个数组,每个元素存放一个指针变量
为什么这里的初始化是使用字符串来初始化的?为什么后续的输出也是用数组的下标法进行输出的?望知道的鱼油解答一二。 本帖最后由 人造人 于 2017-3-9 21:08 编辑
因为字符串就是一个地址
举个例子^_^
#include <stdio.h>
int main(void)
{
char str[] = "test";
printf("%s\n", str); // 数组名字是一个地址
printf("sizeof :%s\n", "100");
printf("%c\n", "Fishc");
printf("%p\n", "fun");
return 0;
}
test
sizeof :100
F
01176B30
请按任意键继续. . . 人造人 发表于 2017-3-9 21:05
因为字符串就是一个地址
举个例子^_^
那么是不是这样:
虽然数组指针 指向一个数组, 但是它不能指向一个指针数组
比如......//省略主体部分
char a, b ,c;
char *array = {&a, &b, &c};
char (*p) = &array;
是不合法的
是这样的吗?
是不是只有在 (*p) 前再加一个*号才行呢?
Hacker_Jack 发表于 2017-3-9 21:20
那么是不是这样:
虽然数组指针 指向一个数组, 但是它不能指向一个指针数组
比如
char *t1; // t1是数组,数组里面存储指针
char (*t2); // t2是指针,指针指向数组 人造人 发表于 2017-3-9 21:42
char *t1; // t1是数组,数组里面存储指针
char (*t2); // t2是指针,指针指向数组
那为什么char (*t2) = &t1;不行呢
显示initialization from incompatible pointer type
t1是一个数组,我弄个t2指向它为什么告诉我类型不符呢? Hacker_Jack 发表于 2017-3-9 22:07
那为什么不行呢
显示initialization from incompatible pointer type
t1是一个数组,我弄个t2指向它 ...
因为 t2是指针,指针指向数组
char t1;
char(*t2) = &t1; Hacker_Jack 发表于 2017-3-9 22:07
那为什么不行呢
显示initialization from incompatible pointer type
t1是一个数组,我弄个t2指向它 ...
char *t1;
char *(*t2) = &t1; 我来解释一下吧,关于这句初始化:
char *p1 = {
"让编程改变世界 -- 鱼C工作室",
"Just do it -- NIKE",
"一切皆有可能 -- 李宁",
"永不止步 -- 安踏",
"One more thing... -- 苹果"
第一行也可以这样解释:
*p1 = {"让编程改变世界 -- 鱼C工作室"}
那么p1 = 字符串首地址(注意,没*的才是地址)
和普通的字符串,比如char str比较的话,就相当于没有指定字符数量而已,比如: char str[] ={"让编程改变世界 -- 鱼C工作室"},而str就是首地址!
(另外注意一点,str和p1还是有区别的,这以后再行解释,但是基于字符串来说,用法很相似。)
字符串,实际上就是一个由char元素组成的数组,而输出时:
比如printf("%s", str)我们给出的str是数组的首地址,printf会根据"\0"所在位置自动判断输出多少个字符。
那么,从上面定义来看,char *p1这个指针数组里存储了5个首地址,他们分别是p1,p1,p1,p1,p1(还是请注意这里没*号)
所以,你的程序输出就变成printf("%s\n", p1),不知道这样解释会不会清楚一点!{:10_277:}
页:
[1]