c语言指针问题,难蚌啊

img


这个p3 2是什么意思,希望能详细解释一下,并解释一下数组和指针的关系

p是个指针数组,可以看做是二维数组
p[3][2]就是第3行第2列的值
那么既然p的定义是p[4],就是说它把数组a切成了4行
123
456
789
10,11,12
第3行第2列不是12吗

P[3][2]首先找到P[3], P[3]对应a[9]的地址,应该p[3][0]对应a[9], p[3][2]对应a[11],a[11]的现在是12,因此结果是12。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7476955
  • 这篇博客也不错, 你可以看下C语言:求出二维数组每列中最小元素,并依次放入p,p所指一维数组中。二维数组中的数已在主函数中赋
  • 除此之外, 这篇博客: C语言P3外传函数递归训练中的 递归与迭代共同解斐波那契数列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 为了更好的理解迭代我们来看例题:求第n个斐波那契数列
    思路是:如果是第三个及以上的斐波那契数就递归,他前两个数字之和。

    //递归法求斐波那契数列
    #include<stdio.h>
    
    int Fib(int n)
    {
    	if (n == 0)
    	{
    		return 0;
    	}
    	if (n <= 2)
    	{
    		return 1;
    	}
    	else
    	{
    		return Fib(n - 1) + Fib(n - 2);
    	}
    }
    
    int main()
    {
    	int n = 0;
    	scanf("%d", &n);
    	int fibnum = Fib(n);
    	printf("%d", fibnum);
    	return 0;
    }
    

    要注意,在不考虑溢出的情况下我们计算第40个斐波那契数列,程序就需要等待好一会才能计算完毕,这效率显然不行,我们下面来看迭代法。

    //迭代法求斐波那契数列
    #include<stdio.h>
    
    int main()
    {
    	int n = 0;
    	int a = 1;
    	int b = 1;
    	int c = 1;
    	scanf("%d", &n);
    	if (n == 0)
    	{
    		printf("0\n");
    	}
    	else if (n <= 2)
    	{
    		printf("%d", c);
    	}
    	else 
    	{
    		while (n>2)
    		{
    			c = a + b;
    			a = b;
    			b = c;
    			n--;
    		}
    		printf("%d", c);
    	}
    	return 0;
    }