#include
#include
void pArray(char *pstr)
{
printf("pArray is %s\r\n", pstr);
printf("pArray + 1 addr %p\r\n", pstr + 1);
}
void pArray2(char (*pArr)[])
{
printf("pArray is %s\r\n", pArr);
// printf("pArray + 1 addr %p\r\n", pArr + 1); error: invalid use of array with unspecified bounds
}
void array(char str[])
{
printf("pArray is %s\r\n", str);
printf("pArray + 1 addr %p\r\n", str + 1);
}
int main(void)
{
char AT_QICSGP[128] = "AT+QICSGP=1,1,\"CMHK\",\"\",\"\",1\r\n";
char *pc = AT_QICSGP;
char *ppc = &AT_QICSGP; // warning: initialization from incompatible pointer type
char(*pppc)[128] = &AT_QICSGP;
// printf("c addr %p\r\n", AT_QICSGP);
// printf("pc addr %p\r\n", pc);
// printf("ppc addr %p\r\n", ppc);
// printf("c addr %p\r\n", AT_QICSGP + 1);
// printf("pc addr %p\r\n", pc + 1);
// printf("ppc addr %p\r\n", ppc + 1);
// pArray(AT_QICSGP);
// array(AT_QICSGP);
// pArray2(AT_QICSGP);
// printf("ppc addr %p, ppc+1 addr %p, &AT_QICSGP addr %p\r\n", pppc, pppc + 1, &AT_QICSGP + 1);
// char *p = "hello";
// char *p2 = "hello world";
// printf("strlen(p) is %d, sizeof(p) is %d\r\n", strlen(p), sizeof(p));
// printf("strlen(p2) is %d, sizeof(p2) is %d\r\n", strlen(p2), sizeof(p2));
// 问题:
// 如何在C语言中定义字符串
// 结论:
// 数组和指针的关系:
// 0, 数组名等于指针,但是数组名不等于指针变量,即数组名是一个地址,不是一个变量
// 1, c语言中没有字符串类型,字符串是以'\0'结尾的字符数组
// 2, 字符串是字符数组,但是字符数组不一定是字符串,因为字符数组不一定以'\0'结尾,但是字符串一定以'\0'结尾
// 3, 假如有一个字符数组str[128],对于str而言,&str 和 str 的值是一样的,都是数组的首地址
// 但是,&str 的类型是 char (*)[128],而 str 的类型是 char *,这是两种不同的类型。
// 所以,str 和 &str 的值相同,但是类型不同, str 是一个指针变量,&str 是一个指针常量
// 例子:
// char str[] = "123"; char *p = str; char *p2 = &str;
// 在你提供的代码中,有一些问题需要注意:
// 字符串的定义:当你声明一个字符串时,应该使用字符数组而不是字符变量。正确的方式是:
// Copy code➕ Insert code
// char str[] = "123";
// 这样,str将会是一个字符数组,用于存储字符串 "123"。
// 指针的定义:在你声明指针变量时,使用了错误的语法。正确的方式是:
// Copy code➕ Insert code
// char *p = str;
// char *p2 = &str[0];
// 这样,p和p2将会是指向字符的指针,分别指向str数组的第一个元素。
// 下面是修正后的代码示例:
// Copy code➕ Insert code
// char str[] = "123";
// char *p = str;
// char *p2 = &str[0];
// 在上述代码中,str是一个字符数组,用于存储字符串 "123"。p和p2是指向字符的指针,分别指向str数组的第一个元素。
// 需要注意的是,p和p2指向的是字符串的第一个字符,而不是整个字符串。如果你想操作整个字符串,可以使用指针来遍历整个字符串,或者使用标准库函数来操作字符串。
return 0;
}