|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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.谢谢大家帮助,本人大一学生,感觉程序设计基础要挂,赶紧突击一下的。 |
|