c语言数组与指针定义(例子)

此篇是c语言数组与指针的定义例子,通过习题理解
更多资料请点击:我的目录

1、 假如有如下定义: int a[3][5];
a. 用 1 种方法表示 a[2][3]的地址。

&a[2][3]

b. 用 2种方法表示 a[2][0]的地址。

&a[2]
&a[2][0]

c. 用 3 种方法表示 a[0][0]的地址。

&a
&a[0]
&a[0][0]

2、编写一个函数,返回一个 double 型数组中最大和最小值的差值,并在一个简单的程序中测试这个函数。
在这里插入图片描述

#include <stdio.h>

double max_min(int len, double arr[]);
double show_array(int len, double arr[]);
double value;
int i, j;

int main()
{
	double arr[10] = {32, 25, 15, 77, 22, 14, 28, 12, 36,50};
	value = max_min(10 , arr);
	show_array(10, arr);
	printf("\nvalue == %lf\n",value);
}

double max_min(int len, double arr[])				//函数:冒泡排序
{
	
	for(i = 0; i < len; i++)
	{
		for(j = i+1; j < len; j++)
		{
			double T;
			if(arr[i] > arr[j])
			{
                   		T = arr[j];
                   		arr[j]= arr[i];
                   		arr[i] = T;
			}
		}
		value = arr[len-1] - arr[0];
	}
}

double show_array(int len, double arr[])			//函数:输出数组所有数据
{
	for( i = 0; i < len; i++)
	{	
		printf("%f\n",arr[i]);
	}
}

3、用变量 a 给出下面的定义
a) 一个整型数

int a;

b) 一个指向整型数的指针

int *a;

c) 一个指向指针的的指针,它指向的指针是指向一个整型

int *(*a);

d) 一个有 10个整型数的数组

int a[10];

e) 一个有 10 个指针的数组,该指针是指向一个整型数的

int *a[10];

f) 一个指向有 10 个整型数数组的指针

int (*a)[10];

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数

int (*a) (int );

h) 一个有 10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (*(a[10]))(int)

温馨提示(怎么阅读复杂声明):
A) 从左到右,遇到的第一个标识符,就是要说明的主体。
B) 以这个主体为中心,剥洋葱式地去解释。

4、下面的程序将打印出什么?解释原因
#include<stdio.h>
int main(void)
{
int ref[]={8,4,0,2};
int *ptr;
int index;
for(index =0,ptr=ref;index<4;index++,ptr++)
printf(“%d%d\n”,ref[index],*ptr);
return 0;
}

在这里插入图片描述

原因:ptr=ref;一句是将数组ref[]的基地址赋给指针prt,此时*prt指向ref[0]的值。
ptr++即prt所指向的地址+1,此时*prt指向ref[1]的值。每次循环index和ptr地址都+1,
最终输出值:ref[0]	*ptr(指向ref[0])
			ref[1]	*ptr(指向ref[1])
			ref[2]	*ptr(指向ref[2])
			ref[3]	*ptr(指向ref[3])

5、在上一题中,ref 是哪些数据的地址?ref+1 呢?++ref 指向什么?

ref[0]的地址、ref[3]的基地址
ref+1 是ref[1]的地址,++ref 指向ref[1]的地址

6、下面每种情况中ptr 和(ptr+2)的值分别是什么?

#include <stdio.h>

int main()
{
	 
	int *ptr; 
	int torf[2][2]={12,14,16}; 
	ptr=torf[0];

	//int *ptr;
	//int fort[2][2]={{12},{14,16}}; 
	//ptr=fort[0];

	printf("   *ptr == %d\n",*ptr);
	printf("*(ptr+2)== %d\n",*(ptr+2));
	return 0;

}

a)
int *ptr;
int torf[2][2]={12,14,16};
ptr=torf[0];
在这里插入图片描述

b)
int *ptr;
int fort[2][2]={{12},{14,16}};
ptr=fort[0];
在这里插入图片描述

7、给定两个相同的整型数组,将他们的各个元素的值相加存放到另一个整型数组中。

#include <stdio.h>

int main()
{
	int num1[20] = { 1, 3, 5, 7, 9 };
	int num2[20] = { 2, 4, 6, 8, 10};
	int num3[20], i;
	
	for( i = 0; i < 5; i++)
	{
		num3[i] = num1[i] + num2[i];
		printf("num3[%d] == %d\n", i, num3[i]);
	}

	return 0;
}

在这里插入图片描述在这里插入图片描述
更多资料请点击:我的目录

发布了75 篇原创文章 · 获赞 35 · 访问量 5922

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/103962699