马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Hermione 于 2017-12-16 23:33 编辑
1.#include <stdio.h>
int main()
{
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p = (int *)(&array + 1);
printf("%d\n", *(p - 6));
return 0;
}
我不明白第5行,强制转换(int *),我觉得不需要转换,因为&array + 1已经代表一个地址了啊
2.#include <stdio.h>
int main()
{
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p)[10] = &array;
printf("%d\n", *(*(p+1)-6));
return 0;
}
不明白第8行,我是这样想的:p+1代表一个地址,也就是array结束后的第一个地址,那么为什么还要在p+1外面加层*,这样就是去那个地址的内容了啊
我输出*(p + 1)和(p + 1),没差别,但是我输出*(*(p+1) - 6)和*((p+1)-6),差别就大了去了,实在不能理解
3.#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;
}
[fishc@localhost s1e23]$ gcc test3.c && ./a.out
这段代码,char *p1[5],这是一个数组,元素是指向字符类型的指针,那么,相当于*p1[0] = "让编程改变世界……",那么相当于它里面是后面这个数组的第一个位置,但是我用char *p = "鱼C";
printf("%s", *p);
就出毛病了,停止工作什么的
P.S.谢谢大家帮助,本人大一学生,感觉程序设计基础要挂,赶紧突击一下的。 |