指针数组
指针数组的本质是数组,数组指针的本质是指针
一个数组中的各个元素都是字符指针,即为字符指针数组,或者指针数组。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 China0040404A America00404052 Canada00404059 Japan00404044 China0040404A America00404052 Canada00404059 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 China0040404A America00404052 Canada00404059 Japan+++++++++++++++++++++++++++++++0040404A America00404052 Canada00404044 China00404059 Japan上述的字符串是放在data 的rodata段中,无法直接操作字符串,利用字符指针数组进行排序,将其的地址排序,实现数据的排序。相当于在图书馆里实现图书的排序,书库的书不动只把书的序号排序*/
启动进程时系统通过命令行传递给进程的参数,即main的参数。
int main(int argc,char * argv[]) {//argc arg: argument(参数),c:count(个数)--参数个数//*argv *arg:指针数组,v vector(向量)---指针数组向量}
"0"
int 0; //0float 0.0;//0.0* NULL //标识未初始化的指针,代表内存的零地址char '\0';//用于表示字符串结束的标志//假0char '0';//'0'"0" '0'+'\0';//