此篇是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;
}
更多資料請點擊:我的目錄