我杨南北又回来了!
---------------------------------------
指针与数组:
数组名实际上就是指向数组第一个元素的指针,就是说,数组名也是一个指针!!!
int a[]={2,4,6,8,10};
int *p = a;
int *p2=&a[0]'
指针p1指向数组a的第一个元素,指针p2也是如此,指针变量p1和p2存放的都是a【0】的地址。
如若要指向另一个数组元素(在数组范围内),只需要在指向数组的每个元素的指针上加上或减去一个整形数值,p++就指向了数组的第二个元素a[1];
实验:用不同的方式输出数组的所有元素:
这第三种方式是我没有用过的,指针用的实在是太少了。
值得一提的事不能对数组名执行++操作,a++事不合法的,这是因为a是数组名,他是数组的首地址,是一个常量!!!
数组元素也可以是指针类型,这种数组称为指针数组,即指针数组的每一个元素都是指针变量。
例:int *p[5];
*的优先级低于运算符[],所以p咸鱼【5】结合,形成p[5],p[5]是一个数组,然后再与*结合,表示数组元素的类型为指针,每个数组元素都指向一个整形变量。这里p就是一个二级指针。
数组本身就是一个指针了,*p【】是指向数组的指针,是指针的指针。
实验:
解释和我想的差不多:
值得一提的事
int (*p)[5],这是指向一维数组的指针
int *p[5],这是一个指针数组,长度为5,数据中每一个元素指向一个整形变量
#include<stdio.h>
int main()
{
int a[2][5]={1,3,5,7,9,2,4,6,8,10};
int (*p)[5],i;
p=a;
for(i=0;i<5;i++)
{
printf("%d ",(*p)[i]);
}
printf("\n");
p++;
for(i=0;i<5;i++)
printf("%d",(*p)[i]);
printf("\n");
return 0;
}
//指针指向数组测试
关于指针数组,数组指针,数组的区别于联系今天只是稍微复习了一下,还不能完全地理顺。贴别人说郝斌老师的指针视频很顶,等这阶段几个项目忙完了一定要看一看。
---------------------------------------------------
指针与函数:指针作为形参与一般的形参有什么区别?指针传值的时候有什么注意点?一般来说指针与函数的结合在什么时候应用较多?
对于指针型形参,实参也可以是NULL,所以在调用函数,给变量开辟内存时,需要进行确认,指针是否为NULL,否则会出现空指针的问题。
返回指针的函数:
函数可以返回正兴致、字符型值、自然也可以返回指针,即返回地址。返回指针的函数一般定义为:
类型名*函数名(参数表);
例如: int *f(int i,int j);
这类我看的太少啦!
指向函数的指针实验:
#include<stdio.h>
#define GET_MAX 0
#define GET_MIN 1
int get_max(int i,int j)
{
return i>j?i:j;
}
int get_min(int i,int j)
{
return i>j?j:i;
}
int compare(int i,int j,int flag)
{
int ret;
int (*p)(int,int);//p是指向函数(名)的指针,两个数谁大就把对应的函数名赋给p
if (flag==GET_MAX)
p=get_max;
else
p=get_min;
ret = p(i,j);
return ret;
}
int main()
{
int i=5,j=10,ret;
ret=compare(i,j,GET_MAX);
printf("The MAX is %d\n",ret);
return 0;
}
新奇的思路,以前从没见过赋给指针函数的形式。
值得注意的是不能对指向函数的指针做任何的运算,例如p++,p--。
既然函数的参数可以是指针,name自然也可以是指向函数的指针,同时也可以有返回函数指针的函数。
返回函数指针:
#include<stdio.h>
//返回函数指针
int get_big(int i,int j)
{
return i>j?i:j;
}
int (*get_function(int a))(int,int)//一个返回函数指针的函数
{
printf("the number is %d\n",a);
return get_big;
}
int main()
{
int i=5,j=10,max;
int (*p)(int,int);
p=get_function(100);
max-p(i,j) ;
printf("The MAX is %d\n",max);
return 0;
}
不是很懂。。