最近在看《c和指针》,每天会更新一些,如有错误望指正。
char **strings;那**strings就是字符串,*strings是**strings的地址,所以**strings以'\0'结尾,和字符串的结尾一样,而*strings的结尾是内存地址的结尾,是NULL。
char *str="wesda"; str="rfdcx"; 都是合法的。但是,char a[10]="sdad";之后再a="dfad"是错的,虽然a就是数组的首地址。
char **strings1;与char *strings2[];基本一致,但前者更强调可以动态分配管理内存,后者更强调是定长字符串。而且常量字符串只能赋给后者,不能给前者。通常通过后者给前者赋值。strings1[0]=strings2[0];的效果是,把0行的每一列的值都赋给了strings1,前提是两者分配的内存要一样大。
char a[10]="dhksp";char *str=a;那么str[1]就是'h',是可以这样访问指针的值的。
*(*strings)++;如果其对应于{"abc","def","ghi"},那么就可以将其对应于strings[3][3];*strings对应于首3,也就是3行,**strings对应于尾部的3,也就是3列,那么**strings初始对应于strings[0][0];执行*(*strings)++;后,就是strings[0][1](在++将其复制完毕后)也就是'b';
这一部分看的很迷糊,想了半天也没弄清楚,如有什么错误还请大家指正。