#include <stdio.h>
int main (void)
{
char * a = {"I love China!"};
char * b = {"I like china!"};
while (* a++ = * b++); //调试到这里就中断了。疑惑就是不是说指针变量只可变吗?可为什么这里就不行了呢?
*a = '\0';
printf ("%s",a);
getch ();
return 0;
}
为什么要把上面的改成:
#include <stdio.h>
int main (void)
{
void copy (char *to,char *from) ;
char * a = {"I love China!"};
char * b = {"I like china!"};
copy (a,b);
printf ("%s",a);
getch ();
return 0;
}
void copy (char * to,char * from)
{
while (* to++ = * from++);
*to = '\0';
}
15 个解决方案
#1
希望大家帮帮忙~
小弟感激不尽~
小弟感激不尽~
#2
常量指针不能改变,你应该是取某个位置的字符,如下
while (*(a++) = *(b++))
while (*(a++) = *(b++))
#3
#include <stdio.h>
int main (void)
{
char a[] = {"I love China!"};
char b[]= {"I like china!"};
char *a1=a;
char *b1=b;
while (* a1++ = * b1++); //调试到这里就中断了。疑惑就是不是说指针变量只可变吗?可为什么这里就不行了呢?
*a1 = '\0';
printf ("%s",a);
//getch ();
return 0;
}
#4
#include <stdio.h>
int main (void)
{
char * a = "I love China!";
a++; //如果说是常量不能改变,那为什么这个又可以改变呢??
//这个同(while (* a++ = * b++);)的改变又有何区别呢?
printf ("%s\n",a);
getch ();
return 0;
}
#5
a++; ------>指针指向了"I love China!"的空格,是指针指向有了变化。
while (* a++ = * b++);是赋值,是试图改变 "I love China!"这个字符串常量。程序
报错。
while (* a++ = * b++);是赋值,是试图改变 "I love China!"这个字符串常量。程序
报错。
#6
指针a指向的字符串存储在常量区内,常量区内的值不能改变,所以试图对常量区的值进行赋值会导致错误
#7
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
#8
#9
他们说的对字符串是常量,内容应该是不能改变的,
*a++只是移动字符数组的指针的位置实在要改变用函数strpy()或使用两个数组char a[],b[]来储存再用你的方法试试
*a++只是移动字符数组的指针的位置实在要改变用函数strpy()或使用两个数组char a[],b[]来储存再用你的方法试试
#10
char *a={"I love china !"};这个a指针指向的是常量区,编译器应该是将a变成常量指针,a是不可变的。
下面copy函数 C函数是按值copy所以将a当参数传进去,其实传的是副本,类似于char*p=a;传进去的是p不是a;
但愿解释清楚了
#11
。。。。
貌似觉得你两个都不行
你确定你两个都行?
貌似觉得你两个都不行
你确定你两个都行?
#12
没看清楚 重说下 a指向的是常量区 常量区得内容是不能改变的 a是可以改变 a指的内容不能改变
#13
额 我是新手,不过=不是赋值么?==才是测试等于,那么while(*a++=*b++)不是在一直循环吗?
#14
哦,原来如此啊,谢谢大家哈!
我还以为内容可变呢
我还以为内容可变呢
#15
常量不能改变
#1
希望大家帮帮忙~
小弟感激不尽~
小弟感激不尽~
#2
常量指针不能改变,你应该是取某个位置的字符,如下
while (*(a++) = *(b++))
while (*(a++) = *(b++))
#3
#include <stdio.h>
int main (void)
{
char a[] = {"I love China!"};
char b[]= {"I like china!"};
char *a1=a;
char *b1=b;
while (* a1++ = * b1++); //调试到这里就中断了。疑惑就是不是说指针变量只可变吗?可为什么这里就不行了呢?
*a1 = '\0';
printf ("%s",a);
//getch ();
return 0;
}
#4
#include <stdio.h>
int main (void)
{
char * a = "I love China!";
a++; //如果说是常量不能改变,那为什么这个又可以改变呢??
//这个同(while (* a++ = * b++);)的改变又有何区别呢?
printf ("%s\n",a);
getch ();
return 0;
}
#5
a++; ------>指针指向了"I love China!"的空格,是指针指向有了变化。
while (* a++ = * b++);是赋值,是试图改变 "I love China!"这个字符串常量。程序
报错。
while (* a++ = * b++);是赋值,是试图改变 "I love China!"这个字符串常量。程序
报错。
#6
指针a指向的字符串存储在常量区内,常量区内的值不能改变,所以试图对常量区的值进行赋值会导致错误
#7
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
#8
#9
他们说的对字符串是常量,内容应该是不能改变的,
*a++只是移动字符数组的指针的位置实在要改变用函数strpy()或使用两个数组char a[],b[]来储存再用你的方法试试
*a++只是移动字符数组的指针的位置实在要改变用函数strpy()或使用两个数组char a[],b[]来储存再用你的方法试试
#10
char *a={"I love china !"};这个a指针指向的是常量区,编译器应该是将a变成常量指针,a是不可变的。
下面copy函数 C函数是按值copy所以将a当参数传进去,其实传的是副本,类似于char*p=a;传进去的是p不是a;
但愿解释清楚了
#11
。。。。
貌似觉得你两个都不行
你确定你两个都行?
貌似觉得你两个都不行
你确定你两个都行?
#12
没看清楚 重说下 a指向的是常量区 常量区得内容是不能改变的 a是可以改变 a指的内容不能改变
#13
额 我是新手,不过=不是赋值么?==才是测试等于,那么while(*a++=*b++)不是在一直循环吗?
#14
哦,原来如此啊,谢谢大家哈!
我还以为内容可变呢
我还以为内容可变呢
#15
常量不能改变