C语言指针细小知识点整理

一些可能没啥用的笔记~


1、(二维数组)元素指针与行指针的区别

  • 元素指针

    int s[3][4];
    int *p1;
    p1=&s[0][0];
    

    此时,p1+1 = &s[0][1].即p1每次移动4个字节。

  • 行指针

    int s[3][4];
    int (*p)[4];
    p2=s;
    

    此时,p2+1=&s[1][0].即p2每次移动4*4=16个字节。


2、指针数组与(二维数组)行指针的区别

  • 行指针

    int (*p)[3];//行指针,只有一个指针变量
    
  • 指针数组

    类型相同的指针构成的数组

    int *p[3];//指针数组,有三个指针变量
    

在这里插入图片描述
指针数组常用于处理字符串。
例如:对城市名按照升序排序
图示如下:
在这里插入图片描述

#include<stdio.h> 
#include<string.h>
void sort(char *city[], int n)
{
	char *temp;
	int i,j,min;
	for(i=0; i<n-1; i++) //选择排序
	{
		min=i;
		for(j=i+1; j<n; j++)
			if(strcmp(city[min],city[j])>0) min=j;
		if(min!=i)
		{
			temp=city[i]; city[i]=city[min]; city[min]=temp;
		}
	}
}
void main()
{
	char *city[4]={"nanjing","beijing","hangzhou","xiamen"};//定义指针数组并初始化
	sort(city, 4);
	for(int i=0; i<4; i++)
		puts(city[i]);
}

3、指向指针的指针
在这里插入图片描述

​ 上图中q即为指向指针的指针。

​ 以上面城市排序为例,其结果输出也可以借助指针的指针完成:
在这里插入图片描述

char **q;
for(int i=0; i<n; i++)
{
	q=city+i;   //q指向city[i]
	printf("%s\n",*q);
}

4、返回指针的函数

​ 例子:函数返回数组元素最大值的地址:

int *max(int a[], int len)
{
	int *p,i;
	p=a;
	for(i=0; i<len; i++)
		if(*p<*(a+i)) p=a+i;
	return m;
}

5、指向函数的指针

int max(int a, b)
{return (a>b)?a:b}

int (*p)(int, int); //定义指向函数的指针变量p
int x, y, z;
scanf("%d%d", &x, &y);
p=max; //使p指向max函数
z=(*p)(x, y); //通过指针变量p调用max函数
printf("Max number = %d\n", z);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值