三种形式灵活运行。
char* str[]
是一个指针数组,每个元素都是一个指向字符的指针。它可以用来存储字符串数组,每个字符串由一个字符指针指向。
char* str[] = {"Hello", "World", "Example"};
在上面的例子中,str
是一个包含三个元素的指针数组,每个元素是一个指向字符的指针,指向相应的字符串。
另一方面,字符指针是指向字符的指针。例如:
char* ptr = "Hello";
在这个例子中,ptr
是一个指向字符的指针,指向字符串 "Hello" 的第一个字符。
字符数组是一个用于存储字符序列的数组。例如:
char arr[] = {'H', 'e', 'l', 'l', 'o', '\0'};
指针数组char* str[]里存的就是字符指针。
简单例题’‘提取指针数组每个字符指针的首字母‘’中:
void fun(char* str[],int n,char *result){
for(int i=0;i<n;i++){
char* d=str[i];
result[i]=d[0];
}
return result;
}
char* d=str[i],可以把指针数组中对应字符指针的值赋给d,通过d访问字符串。
12月2号下午新增:
a[i] = malloc(length+1);
和
a[i] = (char*)malloc((length + 1) * sizeof(char));
两种形式。
以及动态分配内存时(char*)等强制转换的必要与否。
在C语言中,(char*)
是一种类型转换,将返回的指针转换为 char*
类型。在标准C中,这种显式的类型转换并不是必需的,因为malloc
的返回类型是void*
,可以隐式地转换为任何其他类型的指针。
所以,从技术上讲,对于 malloc
的返回值,你可以不使用 (char*)
:
a[i] = malloc((max_length + 1) * sizeof(char));
这是因为在C语言中,void*
可以隐式地转换为任何其他类型的指针。然而,有些编译器开启了严格的类型检查,可能会发出警告,因此为了避免警告,你可以选择使用 (char*)
显式地指定类型转换。
总的来说,在绝大多数情况下,不使用 (char*)
也是合法的,但如果你想编写更加健壮、严格的代码,可以包含 (char*)