首页 > 编程语言 > 详细

数组与指针

时间:2020-03-08 20:46:58      阅读:58      评论:0      收藏:0      [点我收藏+]

一、指针与数组和指针运算的学习

1.观看视频:1.1.4指针和数组、1.2.1指针运算

2.笔记:

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 3.代码列表

技术分享图片

4.遇到的问题

 

(1)问题:int i; int  *p=&i; void *q=(void*)p;

                    在1.2.1视频中在讲指针类型转换时表示:“上式没有改变p所指的变量的类型而是让后人用不同的眼光通过p看它指向的变量。”不能理解“后人用不同的眼光通过p看它指向的变量”中的不同的眼光。

        解决:百度。void *q=(void*)p;将指针p的内容赋值给空类型指针q,并没有改变i或指针p的类型,但在用q读取 int i时,将以指针q的void类型读取i。

(2)问题:在1.1.4代码:

#include<stdio.h>
void minmax(int a[],int len,int *max,int *min);
int main(void)
{
int a[]={1,2,3,4,5,6,7,8,9};
int min,max;
minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
printf("main sizeof(a)=%lu\n",sizeof(a));
printf("min=%d,max=%d\n",min,max);
int *p=&min;
printf("*p=%d\n",*p);
printf("p[0]=%d\n",p[0]);
printf("a[0]=%d\n",a[0]);
return 0;
}
void minmax(int a[],int len,int *min,int *max)
{
int i;
a[0]=1000;
printf("minmax sizeof(a)=%lu\n",sizeof(a));
*min=*max=a[0];
for(i=1;i<len;i++){
if(a[i]<*min)
*min=a[i];

if(a[i]>*max)
*max=a[i];
}
}

为何在自定义函数中执行的a[0]=1000;会影响到主函数的a[0],两个a[0]难道不是局部变量吗?

解决:视频后续解释①void minmax(int a[],int len,int *max,int *min)中的int a[]是个指针等价与int *a,数组变量为常数指针

                                ②运算符"[ ]"可以对指针做

           既自定义函数中的int a[]或int *a指向主函数中的int a[],将int a[]或int *a指向的变量视为数组(此题中实际就是数组),a[0]即可取int a[]或int *a所指向的变量(因为其指向的是主函数里的数组故值为a[0])

数组与指针

原文:https://www.cnblogs.com/zsj123/p/12444120.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!