sa是一个数组 数组的元素是char* {} 初始化数组的元素 用3个字符串常量的首地址初始化每个char*
**
我只看到过
char ca[]={"c", "+","+"};
char *ca[]="C++";
**
应该说这两个语句都不规范,后面一个甚至是错误的 我这边没有通过编译
1. 'c'表示字符 "c"表示字符串 用字符串初始化字符 有的编译器会取字符串的第一个字符 但不是所有编译器都保证这样
2. 数组初始化的语法应该是{}中用逗号分隔各个元素的值 即使只有一个元素也需要{}
论坛上有一个关于复杂类型指针声明的置顶帖 那个讲的很好的
一般看变量的类型 先找到标识符 然后看与标识符最先结合的运算符 判断标识符是 指针 数组 函数(声明) 还是普通变量(标识符不结合运算符)
然后 余下的部分 都是变量的类型 这个类型如果很复杂的话 可以把上面的标识符和与他结合的那个运算符用一个普通的标识符替换掉 目的是看清其类型
这是一个迭代的过程 直至一下子就看出是什么类型
举个典型的例子 指向数组的指针 int (*p)[5];
标识符 p,()内先结合 p是个指针,类型是 int ()[5],是什么呢 把(*p)用_p代替 int _p[5]
看出来了 _p 是一个int数组 所以那个类型是一个5个int元素的数组(当然为什么是数组还可以用这个方法再分析出 不过没必要了)
回退:p是一个指针 指针的类型是 大小为5的int数组
反正关于C语言的类型理解 就是三个组成部分 类型 标识符 运算符(*, [], ())
关键是这里面有个类型是嵌套的
嵌套还好 就怕递归
码字不易 望有助于理解 最近学形码 进度甚缓