S1E23动动手第二题求助
#include<stdio.h>
int main()
{
char *array = { "FishC", "Five", "Star", "Good", "WoW" };
int i, j;
char *(*p) = &array;
for (i = 0; i < 5; i++)
{
for (j = 0;*(*(*p+i)+j) != '\0'; j++) // *(*(*p+i)+j) 这里和 *(*(p+i)+j)有啥区别?
{
printf("%c ", *(*(*p + i) + j));
}
printf("\n");
}
return 0;
}
我认为前者是先取值加一
后者是地址加一再取值 大马强 发表于 2021-10-16 09:41
我认为前者是先取值加一
后者是地址加一再取值
*(*(p+i)+j)有啥区别?是一堆乱码 大马强 发表于 2021-10-16 09:41
我认为前者是先取值加一
后者是地址加一再取值
*(*(p+i)+j) 这个 是一堆乱码 char *(*p);
p = &array;
p+1=&array+1;//&array+1就是数组array后面和它结构一样的没有声明内存空间,里面当然没有初始化,谁知道是什么都是数值?
{ "FishC", "Five", "Star", "Good", "WoW" };
这个你可以看成一个二维的数组就好理解了
""" j
i "FishC"
"Five"
"Star"
"Good"
"WoW"
*p+i ->第i行的地址,你可以
*(*p+i) 就表示第i行的字符串的首地址 可以试试用 printf("%s",*(*p+i)) 来验证
同理可得 *(*p+i) + j 表示 第i行偏移j位的地址
(*(*p+i) + j) 表示 第i行偏移j位的地址 的值
""" 大马强 发表于 2021-10-16 10:41
这个你可以看成一个二维的数组就好理解了
感谢! jhq999 发表于 2021-10-16 10:29
char *(*p);
p = &array;
#include <stdio.h>
int main()
{
int array = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11} };
int(*p) = array;
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%3d", *(*(p+i)+j)); // 那这里为什么又可以*(p+i)呢?
}
printf("\n");
}
return 0;
} 18971811635 发表于 2021-10-16 15:58
#include
int main()
p=array;
p+i=array+i=array jhq999 发表于 2021-10-16 17:46
为啥一个等于array 一个等于&array{:5_94:} jhq999 发表于 2021-10-16 17:46
这个怎么判断? 麻烦了 jhq999 发表于 2021-10-16 17:46
就是前面定义 指针的时候 后面什么情况 是array什么情况是 &array 18971811635 发表于 2021-10-16 18:43
就是前面定义 指针的时候 后面什么情况 是array什么情况是 &array
前面是一维数组,后面的是二维数组 大马强 发表于 2021-10-16 10:41
这个你可以看成一个二维的数组就好理解了
char *(*p) = &array; 为啥不能定义成char (*p) = array; 呢
页:
[1]