char *p和 char p[]的区别?

本文探讨了C语言中字符指针与字符数组的区别,解释了为何通过指针修改字符串会引发错误,而使用字符数组则可以成功实现字符串转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

提问

 

main()
{
	char *p="abc123ABC";//char p[]="abc123ABC"
	int i=0;
	while(*(p+i)!='\0')
	{
		if(*(p+i)>=97 && *(p+i)<=122)
		{
			*(p+i)=*(p+i)-32;
		}
		else if(*(p+i)>=65 && *(p+i)<=90)
		{
			*(p+i)=*(p+i)+32;
		}
		else
			*(p+i)=*(p+i);
		i++;
	}
	printf("%s\n",p);

}


 

为什么出错,改成char p[]="abc123ABC"为什么就对了????

 

 

回答

 

char* p是一个指针,他指向的"abc123ABC" 是只读的,不能改变,你在下面给他赋值肯定是错的
而char p[]是一个数组,已经分配内存,是将"abc123ABC" 复制到该内存里面,这个内存是可读写的
追问
char *p是不是相当于定义了一个字符串常量,字符串的内容不能改变?
回答
你都会说它是字符串常量了,怎么可以改变它的值呢?
你只要记住,这里的指针,它指向的是系统的只读的内存,而数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写

 

 

 

 

 

在 C/C++ 编程语言中,`char **p` `char** p` 并无语法上的区别,因为它们实际上是同一种类型的声明。然而,理解其含义以及如何正确使用非常重要。 #### 1. **`char **p` 的意义** `char **p` 表示的是一个指向指针指针,其中该指针本身指向一个 `char` 类型的数据[^4]。换句话说,`p` 是一个存储地址的变量,而这个地址指向另一个变量,后者也是一个地址,最终指向一个字符(或者字符串中的某个位置)。 - 当我们说 `char *str = "example"` 时,`str` 就是一个指向字符数组首地址的指针。 - 接着如果我们再定义 `char **ptr = &str` ,这里 `ptr` 成为了一个指向 `str` (即第一个指针)本身的指针。 因此可以这样认为: - `*p` 返回的是一个 `char*` 类型的对象; - 而 `**p` 则返回具体的单个字符值。 #### 2. **代码实例说明** 下面提供一些简单的例子帮助加深理解: ```cpp #include <iostream> using namespace std; int main() { char c = 'A'; // 单独的一个字符'A' char *pc = &c; // pc是指向字符c的指针 char **ppc = &pc; // ppc是指向指针pc的指针 cout << "*pc: " << *pc << endl; // 输出*A得到字符A cout << "**ppc: " << **ppc << endl;// 输出**ppc同样获得字符A return 0; } ``` 在这个例子中可以看到,无论是通过 `*pc` 还是 `**ppc` 都能访问到原始字符 `'A'`。 另外还有一种常见情况涉及二维或多维字符串数组的操作: ```cpp #include <iostream> using namespace std; int main(){ const char* names[]={"John","Paul","George","Ringo"}; const char** pn=&names[0]; //pn现在指向names的第一个元素的名字 //也就是"John" for(int i=0;i<4;i++,pn++){ cout<<*pn<<" "; //依次输出每个名字 } return 0; } ``` 在此处,`const char** pn` 被用来遍历整个一维字符串数组 `names`。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值