Skip to content

指针(1)

383字约1分钟

2024-07-07

64.指针数组和多重指针

//对一个字符型数组指针数组排序
#include <stdio.h>
#include <string.h>
void show(char *a[4],int len)
{
	for(int i =0;i<len;++i)
		puts(a[i]);
}
void sort(char **a,int len)
{
	for(int i=0;i<len-1;++i)
		for(int j =0; j<len-i-1;++j)
		{
			if(strcmp(a[j],a[j+1])>0)
			{
				char *p=a[j];
				a[j]=a[j+1];
				a[j+1] =p;
			}
		}
}
int main(void)
{
	char *a[4]={"haha","lala","hello","hehe"};
	sort(a,4);
	show(a,4);
	return 0;
}

65.指针数组做main函数形参

  • 函数无参时,调用main函数时不必给出实参
  • main函数可以带参,例如int main(int argc,char*argv[])
//该程序功能 输出argv中元素的内容
#include <stdio.h>
int main(int argc,char *argv[])
{
	while (argc-- >0)
	{
		printf("%s\n",*(argv++));
	}
	return 0;
}

argc和argv是main函数的形参,它们是程序的"命令行参数" argc表示参数个数,argv表示参数向量,它是一个指向字符指针的指针变量,其每一个元素指向一个字符串

66.void指针

#include <stdio.h>
int main(void)
{
	int a = 3,*p1;
	p1 = &a;
	char ch = '0',*p2;
	p2 = &ch;
	
	void *p3 = (void *)p1; //也可以写成void *p3 =p1;因为其他指针和void*类型的指针发生相互赋值时。会进行隐式数据类型转换


//	p2 = p1;
// printf("%d\n",*p3);  error因为p3不是void *类型,不指向确定类型的指针,所以无法通过*p3来访问变量a


p3=p2;
printf("%d\n",*(char*)p3);
return 0;
}