此篇是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;
}
更多资料请点击:我的目录