小甲鱼C 课后作业24
#include <stdio.h>int main()
{
int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = (int (*))&array;
printf("%d\n", p);
return 0;
}
为什么输出是9???
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 1024
int main()
{
int length, aver;
int i, j;
char str;
scanf("%s", str);
length = strlen(str);
aver = sqrt(length);
for (i = 0; i < aver; i++)
{
for (j = 0; j < aver; j++)
{
printf("%c ", str);
}
printf("\n");
}
return 0;
}
没看懂最后输出为什么这也写。。而且,如果 我输入5个字符,,最后一个字符打印不出来,应该是因为aver=sqrt(length)这里是小数,用了int 舍去小数点后的了。 本帖最后由 jackz007 于 2020-12-13 22:33 编辑
int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = (int (*)) & array ;
这两句定义了一个有 9 个元素的一维数组 array,还定义了一个指向末维为 3 的二维数组指针 p,并且,使此指针指向 array 起始地址,如果通过 p 访问 array 元素,则需要同时提供 2 个参数,例如,* (* (p + i) + j) 或 p 来进行访问。二维数组在内存中其实是按照一维数组的形式存储的,也就是说,完全可以把 array 看成一个具有 3 行 3 列的二维数组。那么,如果用 k 来代表一维数组的下标索引,用 i、j 分别代表二维数组的行、列的下标索引,那么,k 和 i、j 之间有如下的换算关系:
i* 3 + j= k
那么,p 对应的 i 和 j 都是 2,根据上面的换算关系,k = 8,那么,array 的值正好就是 9。 旁观者是我 jackz007 发表于 2020-12-13 22:31
这两句定义了一个有 9 个元素的一维数组 array,还定义了一个指向末维为 3 的二维数组指针 p,并 ...
(*p) 是二维数组? *p又是什么? Dadong丶 发表于 2020-12-14 19:35
(*p) 是二维数组? *p又是什么?
3个元素的指针数组
页:
[1]