c语言问题,有关指针数组的问题

2025-05-13 06:59:28
推荐回答(2个)
回答1:

  1. “指针数组”定义的是“数组”而非“指针”,是说声明了一个存放指针的数组;一旦声明,数组的空间就分配好了,但数组元素并非有效的指针而是机器垃圾值,要对元素赋正确值以后才能使用。char *a[3]={"one","two","three"};意思是:声明一个名为a的字符型指针数组,有3个元素,并同时用常字符串"one"、"two"和"three"的指针(第一个字符的地址,叫这个字符串的指针)依次初始化;就是说这种写法,{}中的3个字符串也同时放在了某个地方且是不可更改的常量,只是把它们的首地址赋给了数组a。前面说了,char *a[3];是数组,已经为a分配了内存,不必用malloc动态分配,写成char *a[3];a[0]="one";a[1]="two";a[2]="thrdee";同样是合法的。

  2. 肯定能编译!通过指针可以实现对它指向的字符串的任何操作。如果有char *a[3]={"one","two","three"};,那么printf("%c\n",a[0][1]);就输出了字符n;*a[0][1]不行,因为[]的优先级比*高,被编译器解释为*(a[0][1]),这就不合法了。

回答2:

1,不一定需要,你仍然可以 a[0] = "one"这样
2 a[0][1]即可输出n,前面不必加*