您的位置:首页 > 编程语言 > C语言/C++

C语言——指针与数组

2011-08-12 13:51 169 查看
在C语言中 ,无论是一维数组还是二维数组 ,数组名实际是指针常量(是一个符号常量) ,称为数组指针

一 :一维数组和指针 :

//数组名a是数组的起始地址 ,C语言规定 :
a = &a[0] , a + 1 = &a[1] , ... , a + i = &a[i] , ...
//由指针运算*和&的关系可知 :
* a = a[0] , *(a + 1) = a[1] , ... , *(a + i) = a[i] , ...


例一:任意输入5个整数 ,按由小到大次序输出,并输出其中最大最小数各自出现的次数

#include <stdio.h>

int main()
{
int max = 0 , min = 0 , temp , i , j , num[5] , *p ;

for(i = 0 ; i < 5 ; i++)  //依次输入5个整数到数组内
scanf("%d", num+i);

for(i = 0 ; i < 5 ; i++)  // 比较大小 ,按从小到大顺序排列
{
for(j = i+1 ; j < 5 ; j++)
{
if(*(num+i)>*(num+j))
{
temp = *(num+i);
*(num+i) = *(num+j);
*(num+j) = temp ;
}
}
}

for(j = 0 ; j < 5 ; j++)   //计算max , min 的次数
{
if(*(num+j) == *(num+0))
min += 1 ;
if(*(num+j) == *(num+4))
max += 1 ;
}

printf("\n max times = %d , min times = %d \n" , max , min);

//for(p = num ; p <= num + 4 ; p++)
for(i = 0 ; i < 5 ; i++)   // 两种输出方式都可以
{
//printf("%5d" , *p);
printf("%4d", *(num +i));
}
printf("\n");

return 0 ;
}




二 :指针与多维数组 :

二维数组 a[m]
中的元素 a[i][j] 的表示方法 有以下 7 种 (int *p = a ;):

a[i][j]
*(a[i] + j)
*(*(a + i) + j)
(*(a + i))[j]
*(&a[0][0] + n * i + j)
*(a[0] + n * i + j)
*(p + n * i + j)


例二 :由键盘输入 8 个整数 ,存入一维数组 a 中 ,再组成一个两行四列的二维数组 b[2][4] ,要求b[i][j]的值为a[0] , a[1] , ... , a[0] + i *4 + j 之和

#include <stdio.h>
#define   N    8

int main()
{
int a
, b[2][4] , sum = 0 , i , j , *pa = a , *pb = b ;

for(i = 0 ; i < N ; i++)
{
scanf("%d" , pa + i);
}

for(i = 0 ; i < 2 ; i++)    //计算生成b[2][4]
{
for(j = 0 ; j < 4 ; j++)
{
sum += *(pa + i * 4 +j) ;
*(pb + i * 4 + j) = sum ;
}
}

printf("\n Aarray : ");
//for(pa = a ; pa < a + N ; pa++) //两种输出方式都可以
for(i = 0 ; i < N ; i++)
{
//printf("%d" , *pa);
printf("%4d" , *(pa+i));
}

printf("\n Barray :");
for(i = 0 ; i < 2 ; i++)   //输出数组 b[2][4]
{
printf("\n");
for(j = 0 ; j < 4 ; j++)
{
//printf("%4d" ,*(pb + i * 4 + j)); //两种输出方式都可以
printf("%4d" , *(*(b + i) + j));
}
}
printf("\n");

return 0 ;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: