什么是指针数组?
一个数组,里面存放的元素均为指针类型数据,被称为指针数组。
其定义形式?
int *name[4];
基本实例一:利用数组初始化指针数组
#include<stdio.h>
#include<iostream>
#include<string.h>
int main() {
int a[5] = { 1,2,3,4,5 };
int* name[5] = { &a[0], &a[1], &a[2], &a[3], &a[4] };
int i;
for ( i = 0; i < 5; i++)
{
printf("%d\n", *name[i]);
}
system("pause");
return 0;
}
基本实例二:将字符串按照从小到大进行排序
#include<stdio.h>
#include<iostream>
#include<string.h>
//将字符串按其首字母进行排序
//传入的是指针数组
void sort(char* str[],int n) {
char* tmp;
int i, j, k;
//从第0个位置开始,到倒数第二个字符串
for (i = 0; i < n-1; i++)
{
//k用于记录当前的字符串小标,
k = i;
//遍历第i个之后的字符串,到最后一个为止
for ( j = i+1; j < n; j++)
{ //strcmp用于比较字符串str1和str2是否相同。如果相同则返回0;
//如果不同,在不同的字符处如果str1的字符大于str2的字符,则返回1,否则返回-1
if(strcmp(str[k],str[j])>0)
{ // 将较小的赋值给k
k = j;
}
//如果当前最小的位置已经不是i了,就将第i个位置和第k个位置的字符串进行交换
if (k != i)
{
tmp = str[i];
str[i] = str[k];
str[k] = tmp;
}
}
}
}
void print(char* str[], int n) {
int i;
for ( i = 0; i < n; i++)
{
printf("%s\n", str[i]);
}
}
int main() {
//定义一个指针数组,指向的是数组中的每一个字符串
//注意在visual stdio2019中会报错,解决方法参考https://www.cnblogs.com/xiximayou/p/12121287.html
//中的第一种方式,一了百了
char* str[] = { "hello","goodbye","hi","hella" };
void sort(char* str[], int n);
void print(char* str[], int n);
int n = 4;
sort(str, n);
print(str, n);
system("pause");
return 0;
}
输出: