斩---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语言指针于马下!(上)
进一步的学习的路肯定越来越坎坷,但也会越来越有趣,我们一起加油吧!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wlfyok/article/details/105706890