马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 字符。由结果反推对应表达式也不会很难
|