|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 1613551 于 2022-5-12 10:55 编辑
请问这个三个指针赋值的区别是什么?
第一个程序的第11行和第二个程序的第8行,也就是,printf("%d\n", *(*p2 + i))和printf("%d\n", *(*(p+1)-6))的区别是什么?
- #include <stdio.h>
- int main()
- {
- int temp[5] = {1, 2, 3, 4, 5};
- int (*p2)[5] = &temp;
- int i;
- for (i = 0; i < 5; i++)
- {
- printf("%d\n", *(*p2 + i));
- }
- return 0;
- }
复制代码
- #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;
- }
复制代码
第三个程序的第7行不是数组指针的命名方式吗 为什么多了一个*啊
- #include <stdio.h>
- int main()
- {
- char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};
- char *(*p)[5] = &array;
- int i, j;
- for (i = 0; i < 5; i++)
- {
- for (j = 0; *(*(*p + i) + j) != '\0'; j++)
- {
- printf("%c ", *(*(*p + i) + j));
- }
- printf("\n");
- }
- return 0;
- }
复制代码
本帖最后由 风车呼呼呼 于 2022-5-12 16:55 编辑
printf("%c ", *(*(*p + i) + j));
p: &array
*p: array
*p+i: array [ i ] (指针数组中的第i个元素(指针))
*(*p+i): 该指针所指的地址(字符串首地址)
*(*p+i)+j: 该字符串第j个字符的地址
*(*(*p+i))+j): 该字符串第j个字符
单独看不懂这条语句没关系,也应该知道这是在遍历打印array数组,第 i 串的第 j 字符。由结果反推对应表达式也不会很难
|
|