C/C++,指针数组

指针数组

指针数组的本质是数组,数组指针的本质是指针

一个数组中的各个元素都是字符指针,即为字符指针数组,或者指针数组。

int arr[] = {1,2,23,45,6};//整形数组
char cArr[] = {'a','b','v','d'};//字符数组
char a,b,c,d;
char * cpArr[] = {&a,&b,&c,&d};
//<=> {char*,char*,char*,char*}字符数组指针
char *pa ="China",*pb = "America",*pc = "Canada",*pd = "Japan";
char * cppArr[] = {pa,pb,pc,pd};//放进去的是地址
//<=>
for(int i = 0;i < 4;i++) {
    printf("%p %s\n",cppArr[i],cppArr[i]);
}
char * pArr[] = {"China","Amercia","Canada","Japan"};//指针数组存放的事字符串的地址
for(int i = 0;i < 4;i++) {
    printf("%p %s\n",cppArr[i],cppArr[i]);
}//和上述输入的结果是一样的
/*
00404044 China
0040404A America
00404052 Canada
00404059 Japan
00404044 China
0040404A America
00404052 Canada
00404059 Japan
*/

排序:

char * pArr[] = {"China","America","Canada","Japan"};
for(int i = 0;i < 4;i++) {
    printf("%p %s\n",pArr[i],pArr[i]);
}
int n = sizeof(pArr)/sizeof(*pArr);//sizeof(pArr);总的pArr的大小,*pArr是数组首元素的大小。
char *pt;
for(int i = 0;i < n-1;i++) {
    for(int j = i+1;j < n;j++) {
        if(strcmp(pArr[i],pArr[j]) > 0) {
            pt = pArr[i];
            pArr[i] = pArr[j];
            pArr[j] = pt;
        }
    }
}
printf("\n+++++++++++++++++++++++++++++++\n");
for(int i = 0;i < 4;i++) {
    printf("%p %s\n",pArr[i],pArr[i]);
}
/*
00404044 China
0040404A America
00404052 Canada
00404059 Japan

+++++++++++++++++++++++++++++++
0040404A America
00404052 Canada
00404044 China
00404059 Japan
上述的字符串是放在data 的rodata段中,无法直接操作字符串,利用字符指针数组进行排序,将其的地址排序,实现数据的排序。相当于在图书馆里实现图书的排序,书库的书不动只把书的序号排序

*/

启动进程时系统通过命令行传递给进程的参数,即main的参数。

int main(int argc,char * argv[]) {
//argc arg: argument(参数),c:count(个数)--参数个数
//*argv *arg:指针数组,v vector(向量)---指针数组向量
}
int   0; //0
float 0.0;//0.0
* NULL      //标识未初始化的指针,代表内存的零地址
char '\0';//用于表示字符串结束的标志

//假0
char  '0';//'0'
"0" '0'+'\0';//