鱼C论坛

 找回密码
 立即注册
查看: 3004|回复: 11

C指针的问题 求大侠解释改正错误

[复制链接]
发表于 2012-1-21 19:40:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教下    字符串指针里面的元素只能被访问不能够更改吗?  比如 char *p = "hello"  , printf("%c",*(p+0))语句合法 而且能够正常输出首地址的引用值h 但是*(p+0)= 'k'会让程序出错 求解释
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 19:54:40 | 显示全部楼层
因为这样定义的字符串是常量。。常量是不允许更改的。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 19:55:07 | 显示全部楼层
char *p = "hello" ;只是使p指向数组首地址
char p[]="hello";这样的话,系统是分配了地址的
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-21 20:02:21 | 显示全部楼层

但是在这个函数中怎么可以进行加一的运算了?请看
void prochar (char *str,char ch)
{
   char *p;
   for(p = str;p!='\0';p++)
        {
           if(*p == ch)
             {
                 *str=*p;(*str)++;str++;
             }
        }
     *str="\0";
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 20:33:22 | 显示全部楼层
/鸡蛋饼. 发表于 2012-1-21 20:02
但是在这个函数中怎么可以进行加一的运算了?请看
void prochar (char *str,char ch)
{

:o能不能看下具体程序。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 20:33:35 | 显示全部楼层
/鸡蛋饼. 发表于 2012-1-21 20:02
但是在这个函数中怎么可以进行加一的运算了?请看
void prochar (char *str,char ch)
{

:o能不能看下具体程序。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 21:51:33 | 显示全部楼层
指针加一并没有改变指向的内容。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-21 22:43:37 | 显示全部楼层
地址 指针 常量 变量
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-22 11:18:30 | 显示全部楼层
chao_prince 发表于 2012-1-21 20:33
能不能看下具体程序。。

#include <stdio.h>

void prochar(char *str,char ch)
{
        char *p;
        for(p = str;*p!= '\0';p++ )   // 将形参 *str的值
        {
                if(*p == ch)
                {
                         *str = *p;
                        (*str)++;             //主函数中指针str引用值被改变了

                        str++;
                }
               
        }
        *str = '\0';
}

int main (void)
{
        char str[80];
        void prochar(char *str,char ch);
        scanf("%s",str);
        prochar(str,'r');
        printf("%s",str);
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-22 11:46:04 | 显示全部楼层
char str[80];因为你这里申请的是字符数组。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-22 12:11:47 | 显示全部楼层
chao_prince 发表于 2012-1-22 11:46
char str[80];因为你这里申请的是字符数组。。

意思就是说 C语言编译系统将数组转化为等价的指针形式来处理呢 ?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-22 13:41:00 | 显示全部楼层
/鸡蛋饼. 发表于 2012-1-22 12:11
意思就是说 C语言编译系统将数组转化为等价的指针形式来处理呢 ?

char str[80]..这个已经申请了80个字节的空间。。
char *str = "xx";是将str初始化为字符串常量。。这个只能这样初始化。。在其它地方改变它都是不合法的。。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-10 22:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表