数组:
存储在一块连续的内存空间中
数组名就是这块连续内存空间的首地址(数组名就是数组的首地址,也会数组首元素的地址)
double score[] = {98,87,65,43,53}
double*ptr_score;
ptr_score=&score[0]; ptr_score = score; 这俩个是相等的
存储在一块连续的内存空间中
数组名就是这块连续内存空间的首地址(数组名就是数组的首地址,也会数组首元素的地址)
double score[] = {98,87,65,43,53}
double*ptr_score;
ptr_score=&score[0]; ptr_score = score; 这俩个是相等的
int i;
double score[] = {98,87,65,43,53};
double * ptr_score;
ptr_score = score;
for (i=0;i<5;i++)
{
printf("%lf\n",*(ptr_score+i)); //第一次循环的时候 *ptr_score= 98然后i++ 地址加一后 *ptr_score==87
} //那么指针一次移动多长 sizeof(double)
double score[] = {98,87,65,43,53};
double * ptr_score;
ptr_score = score;
for (i=0;i<5;i++)
{
printf("%lf\n",*(ptr_score+i)); //第一次循环的时候 *ptr_score= 98然后i++ 地址加一后 *ptr_score==87
} //那么指针一次移动多长 sizeof(double)
使用指针访问数组元素
pritnf(“%lf\n”,prt_score[i]);pritnf(“%lf\n”,score[i]); //这两种方式是相同的
pritnf(“%lf\n”,*(ptr_score+i));// 建议使用这种方式
printf("%lf\n",*ptr_score++); //不建议使用
可以把下面的代码放在编译器中自己研究一下深入了解指针与数组
int array[]={15,20,23,25,36};
int i;
int *ptr_array;
ptr_array = array;
for (i=0;i<5;i++)
{
printf("第%d个元素的值%d\t是地址为:%p\n",i+1,ptr_array[i],&ptr_array[i]);
printf("第%d个元素的值%d\t是地址为:%p\n",i+1,*(ptr_array+i),ptr_array+i);
printf("第%d个元素的值%d\t是地址为:%p\n",i+1,*ptr_array,ptr_array);
ptr_array++; //移动指针
}
int array[]={15,20,23,25,36};
int i;
int *ptr_array;
ptr_array = array;
for (i=0;i<5;i++)
{
printf("第%d个元素的值%d\t是地址为:%p\n",i+1,ptr_array[i],&ptr_array[i]);
printf("第%d个元素的值%d\t是地址为:%p\n",i+1,*(ptr_array+i),ptr_array+i);
printf("第%d个元素的值%d\t是地址为:%p\n",i+1,*ptr_array,ptr_array);
ptr_array++; //移动指针
}
数组逆序
int array[N]={15,13,12,11,56};
//实现数组的逆序-原理就是数组首尾元素进行交换 交换的时候第i个值和第N-i-1个值交换
int temp; //临时变量
int i;
//交换时也可以考虑用指针交换
for (i=0;i<N/2;i++)
{
temp =array[i];
array[i]=array[N-i-1];
array[N-i-1] = temp;
}
for (i=0;i<N;i++)
{
printf("%d\n",*(array+i));
}
//交换时也可以考虑用指针交换
int *ptr_array_start =array;
int *ptr_array_end =array+N-1; //N为元素的个数
while (ptr_array_start!=ptr_array_end)
{
temp = *ptr_array_start;
*ptr_array_start = *ptr_array_end;
*ptr_array_end = temp;
//首元素的地址向后移动
ptr_array_start++;
//末元素的地址向前移动
ptr_array_end--;
}
for (i=0;i<N;i++)
{
printf("%d\n",*(array+i));
}
int *ptr_array_start =array;
int *ptr_array_end =array+N-1; //N为元素的个数
while (ptr_array_start!=ptr_array_end)
{
temp = *ptr_array_start;
*ptr_array_start = *ptr_array_end;
*ptr_array_end = temp;
//首元素的地址向后移动
ptr_array_start++;
//末元素的地址向前移动
ptr_array_end--;
}
for (i=0;i<N;i++)
{
printf("%d\n",*(array+i));
}
数组与指针小结
1、int num[50];// num是数组名。也是数组的首地址,也是数组首元素的地址 num的值与&num[0]的值是相同的
2、数组第i+1个元素可表示为: 第i+1个元素的地址:&num[i+1]或num+i +1 第i+1个元素的值:num[i+1]或*(num+i+1)
为指向数组的指针赋值:int * ptr_num = num;或int *ptr_num = &num[0]
指针变量可以指向数组元素:int *ptr_num = &num[4];或int *ptr_num = num + 4
1、int num[50];// num是数组名。也是数组的首地址,也是数组首元素的地址 num的值与&num[0]的值是相同的
2、数组第i+1个元素可表示为: 第i+1个元素的地址:&num[i+1]或num+i +1 第i+1个元素的值:num[i+1]或*(num+i+1)
为指向数组的指针赋值:int * ptr_num = num;或int *ptr_num = &num[0]
指针变量可以指向数组元素:int *ptr_num = &num[4];或int *ptr_num = num + 4