斩---c语言指针于马下!(中)
这次笔者打算将指针部分的重点,接着(上)的文章写一下,因为基础的东西大家看书或者其他途 径应该懂挺容易(反正比我厉害,害羞),笔者就将基础带过,重点的地方重点讲一下。文章(下) 的安排是写一些具有代表性和经典意义的例题,这里就当是预告一下啦。
以上是对指针部分重要内容的概括,本文与上篇文章很好概括了指针的这一章的知识点,上一篇的地址如下: 斩—c语言指针于马下!(上)
通过指针引用字符数组
如果是int型数组,显然我们的是一个一个引用
int a[10],i;
for(i = 0 ;i < 10;i++)
{
printf("%d",a[i]);
}
如果是字符数组,则我们可以一连串输出
char a[10];
printf("%s",a);
这里的a就是a数组的首地址,如果我们对a+5,则再次执行上图程序,输出的就算从a[6]-a[10]的字符
另外,我们要点出的是,我们可以用数组名作为函数参数,也可以用字符指针作为函数参数,其相关的函数定义如下
void copy(char from[],char to[])
void copy(char *from,char*to)
同时和前面呼应的scanf函数,用到指针,相比大家也可以理解了
scanf("%d",&a);
scanf("%s",s);
其中s就是地址,所以不用在前面加上取地址符,读者可以上机操作看看加上会有什么效果,加深一下印象。
指向函数的指针
易知,指针可指向变量,相应的也有可以指向函数的指针,例如:
int (*p)(int ,int);
下面来看一段程序,来加深对指向函数指针的理解,相信一看便知。
#include<stdio.h>
int main()
{
int max( int x, int y);
int a,b,c;
printf("input two integer numbers:\n");
scanf("%d %d",&a,&b);
c=max(a,b);
printf("the max numebr is %d\n",c);
return 0;
}
int max(int x, int y)
{
int z;
if(x>y)
{
z=x;
}
else
{
z=y;
}
return z;
}
当然,指向函数的指针也可以作为指针变量,如果大家想进一步了解可以去继续搜索和学习,或是私信、评论,笔者一定及时回答。
返回指针的函数
作为返回值是指针的函数,其一般的定义为float *search(int n,(* pointer)[4])
,与普通有返回值的函数不同的是,最后函数的返回值是指针,而不是一个值,即
float *search(int n,(* pointer)[4])
{
...
...
return pointer; //返回值是指针
}
指针数组和多重指针
#include<stdio.h>
#include<string.h>
int main()
{
void sort(char *name[] , int n);
void print(char *name[] , int n);
char *name[]={
"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
int n=5;
sort(name,n);
print(name,n);
return 0;
}
void sort(char *name[] , int n)
{
char *temp;
int i,j,k;
for (i=0 ; i<n-1 ; i++)
{
k=i;
for(j=i+1 ; j<n ; j++)
{
if(strcmp(name[k], name[j]) > 0)
{
k=j;
}
}
if(k != i)
{
temp=name[i];
name[i]=name[k];
name[k]=temp;
}
}
}
void print(char *name[], int n)
{
int i;
for (i=0 ; i<n ;i++)
printf("%s\n",name[i]);
}
运行结果如下:
动态分配内存和指向它的指针变量
这里提到的是与数据结构有关的动态存储,当然也有静态存储,就算a[10],即一开始以定义好存储空间。如果我们要扩大这个空间,就不好实现了,但是动态存储就很好地解决了这个问题。
1.用malloc函数开辟动态存储区
malloc(50);
2.用calloc函数开辟动态存储区
p=calloc(20,4);
3.用realloc重新分配动态存储区
realloc(p,50);
4.用free函数释放动态存储区
free(p);
小结
以上是对指针部分重要内容的概括,本文与上篇文章很好概括了指针的这一章的知识点,上一篇的地址如下:斩—c语言指针于马下!(上)
进一步的学习的路肯定越来越坎坷,但也会越来越有趣,我们一起加油吧!