1.使用二维字符串存储字符串的时候会出现存储浪费的情况,使用指针数组存储则不会
char *s[]={"C","Basic","Foxpro"};
for(i=0;i<sizeof(s)/4;i++){
puts(s[i]);
}
char a[][14]={"C","Basic","Foxpro"};
for(i=0;i<3;i++){
puts(a[i]);
}
2.指针数组作为函数参数传递多个字符串给另一个函数。
指针数组是一个数组,只是里面存放了指针
void str_sort(char *s[],int n){}
n代表指针数组的长度
3.用二维数组指针作为参数
void str_sort(char (*s)[14],int n){}
这样的函数不具有通用性,因为函数要处理的字符串长度是不同的,而14就要求字符串的长度不能超过14
void str_sort(char *s[],int n){
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(s[j],s[j+1])>0){
char *tmp;
tmp=s[j];
s[j]=s[j+1];
s[j+1]=tmp;
}
}
int main(){
int i,n;
char *s[]={"W","Basic","Foxpro"};
str_sort(s,3);
for(i=0;i<3;i++){
puts(s[i]);
}
return 0;
}
4.使用二级指针处理字符串数组,即指针指向指针数组
判断字符串数组中的字符串的尾和下一个字符串的首部是否一样。
#include<stdio.h>
#include<string.h>
int str_sort(char **pp,int n){
int i,j,flag=0;
for(i=0;i<n-1;i++){
if(*(*(pp+i)+strlen(*(pp+i))-1)!=*(*(pp+i+1)))
{
flag=1;
break;
}
}
return flag;
}
int main(){
char *s[]={"cfg","gds","sm","mest"};
char **pp=s;
if(str_sort(s,sizeof(s)/4))
printf("yes\n");
else
printf("no\n");
return 0;
}
5.指针与函数
函数的指针:指针函数
定义
int (*p)(int a,int b);
调用
int i=0,j=0;
int k=(*p)(i,j);
例子:
int calc(int (*pf)(int a,int b),int a,int b){
int f;
f=(*pf)(a,b);
return f;
}
int add(int a,int b){
return a+b;
}
int div(int a,int b){
return a/b;
}
int k=calc(add,5,3);
返回指针的函数:
定义:
int * func(参数){}
6.指针与const变量
const int * p;//同 int const * p;
指针指向的内容不能修改注意是 不能通过*p的方式修改,本身还可以修改
int * const p;//p的值不允许修改
const关键字是为了限制修改 指针的值,或者指针所指向变量的值。