|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼视频里的源代码有一个是:
#include <stdio.h>
int main()
{
char *p1[5] = {
"让编程改变世界 -- 鱼C工作室",
"Just do it -- NIKE",
"一切皆有可能 -- 李宁",
"永不止步 -- 安踏",
"One more thing... -- 苹果"
};
int i;
for (i = 0; i < 5; i++)
{
printf("%s\n", p1[i]);
}
return 0;
}
此时输出的是指针数组里的每一个内容,但是我理解不加*的指针名不是取指针地址的意思么?然后我把printf("%s\n", p1[i]);改成了printf("%p\n", p1[i]);此时就输出了4个地址,那么为什么前面也可以运行出来?指针对应的类型不应该是%p么?
求解!
这个解释要比较长。 char p[5]; 是指 p是一个数组,它所存储的内容是字符型。现在多了 *,所以存储的内容是【指向字符型的指针】
字符串其实是数组,只要有指针找到第一个元素的地址就可以把数组的全部内容给找出来。
* 不是取地址,要看左右值。在等号左边是取地址,没有等号或在等号右边是取值,叫解引用。用下标的方式 [ ] 等同解引用。
为什么要在外面加 * 呢?如果不加,就只能存储 4 个字符。
可以打印出字符串是因为 %s。%p 会是该字符串的首地址而已
|
|