C指针输出
有人能帮我理解为什么我会收到这个输出吗? 我对第一个printf:f[2]=3感到困惑 第二次打印我没有问题。 第三张照片让我很困惑C指针输出,c,arrays,function,pointers,output,C,Arrays,Function,Pointers,Output,有人能帮我理解为什么我会收到这个输出吗? 我对第一个printf:f[2]=3感到困惑 第二次打印我没有问题。 第三张照片让我很困惑 #include <stdio.h> #include <stdlib.h> #define DIM 8 int*func(int*,int); int k = 10; void main(void) { int i; int k = 11; int f[DIM]; int*p1 = f+1; int**p2 =
#include <stdio.h>
#include <stdlib.h>
#define DIM 8
int*func(int*,int);
int k = 10;
void main(void)
{
int i;
int k = 11;
int f[DIM];
int*p1 = f+1;
int**p2 = &p1;
int*p3;
char* zf[]={"text0", "text1", "text2"};
for(i=0; i<DIM; i++)
f[i] = i % DIM + 1;
printf("a) i=%d, *f=%d, f[2]=%d, *(p1+5) =%d\n", i, *f, f[2], *(p1+5));
printf("b) k=%d, zf[1]=%s, **zf=%s, **p2=%d\n", k, zf[1], *zf, **p2);
p3 = func(f, k);
p1 = p1 + 3;
printf("c) k=%d, *p3=%d, f[7]=%c, *p1=%d\n", k, *p3, f[7], *p1);
}
int* func (int ff[])
{
int* p4 = (int*) malloc (sizeof(int));
*p4 = ff[3];
k = k - 3;
ff[k] = 65;
return p4;
}
讨论了相关问题:-
int*p1 = f+1;
f
衰减为指向第一个元素的指针(int*
)f+1
只不过是&f[1]
或f[1]
的地址。记住,指针算术使用它指向的任何类型的大小单位。这里的+1
意味着将sizeof(int)
添加到f
中
*f
在第一个printf中取消引用该指针(衰减指针)。由于它是指向第一个元素的指针,*f
是f[0]
p1+5
正在从f+1
移动5*sizeof int
字节,即&f[6]
。所以*(p1+5)
就是f[6]
%c
打印其ASCII值存储在f[7]
中的字符,在我们创建的调用函数f[7]=65
中,字符A
的ASCII值为65
p1=p1+3
指向f[4]
,其逻辑与之前相同-它打印5
,这就是原因
动态分配的内存,其生存期超出了函数的范围-您返回了它,并打印了存储在其中的值。(
*p3
)。分配给已分配内存的值是数组f
的索引3
处的元素。您已将其传递给函数func
Terribru-一堆单字母变量名。