当前位置:首页 » 编程语言 » c语言指向字符常量的指针
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言指向字符常量的指针

发布时间: 2022-07-09 23:24:59

c语言中关于字符串指针常量的问题

第一个:char *p = "123456";
char *s = "asdghh";
*s = *p;
你这个之所以会错,是因为指针s指向的是常量字符串 asdghh 而*s=*p相当于改变常量字符串的值,常量是不能改变的,而且常量也不能做左值,所以出错。
第二个:
char a[]="123456";//这个的意思是 在内存充开辟空间 把常量字符串复制到这个空间
char *p = a;//这个说明指针p存储的是数组变量a的地址
char a1[]="asdghh"; //同上
char *s =a1; //同上
*s = *p; // 这句的意思是 把指针p所指向空间的值(这里为数组a)复制到指针s所指向的空间(这里为数组a1)

⑵ 关于c语言字符指针变量指向字符串常量的疑问

错误原因:a、b是字符指针,它们指向常量字符串。当你把它们作为参数传递给函数_string时,函数所做的操作就是改变b所指向的字符串的值,所以错误。你要知道常量字符串时不能改变值的(这涉及到存储位置的知识,常量字符串存储在常量区,就像const声明的常量一样,改变它的值就是非法的),你只能改变b,让其指向其他字符串。
修正方法:将b改为长度适宜的字符数组。

⑶ c语言中字符串常量与指针的关系.

首先请明确一点:指针也是变量, 只不过编译器解析该变量时将它的内容看作地址去访问内存.
其次请明确应,程序分为不同的段,包括代码段、数据段等。
类似“hello”这类的变量实际是常量字符串,位于程序的代码段,char *ptr="hello表示定义字符指针ptr、并将字符串“hello”的首地址赋值给ptr,如此便可通过ptr引用“hello”,当然是只读引用了。(注意和char ptr[] = "hello"区分,后者定义了一个字符数组ptr)

⑷ C语言 字符指针

你最开始的说法是正确的。

然后第二段程序里面,STRING1是指向在堆上分配的内存,并且该内存没有初始化,所以你这个strcat(STRING1,"test1")的行为是很危险的,编译器在STRING1中寻找到第一个'\0'的位置,然后将"test1"连接在该位置。这个可能会导致溢出,因为STRING1只有100个字符大小。该操作结果未定义,跟执行时堆的情况有关,而执行时堆的情况是不可预料的。
至于你的疑问,这个地方STRING1指向在堆上分配的内存,堆上的内存是可以给它赋值,而"test1"虽然是常量,但是我们并没有企图修改它,只是读取它,然后将它的值放入STRING1而已。

最后一个问题。C语言中字符串是不能直接用"="赋值的。用strcpy(STRING2,"sdfwe");

⑸ c语言用指针定义字符串常量问题

有思考~真不错~
你试试printf("%p\n%p\n%p\n",nam1,nam2,nam3);
就是把取地址符去掉,这样就是打印的常量字符串的地址了。

你打印出来的是新生成的三个指针变量的地址,确实不同;三个指针变量指向的地址确实是相同的(也就是常量字符串的地址),概念混淆了。

⑹ C语言中指向字符串常量的指针问题

定义成字符数组的时候,数组名就是指向数组的首地址的指针,数组在一串连续的地址中,当执行复制向后移动指针的时候会依次读取字符,没问题,但是如果是指针,它指向的是在静态区的一串字符串的首地址,你要把指针向后移动,他的下一个指针指向何处就是个问题了,也就是你访问了不属于你的内存地址,所以出错了!!!

⑺ C语言里为什么字符指针变量指向的字符串常量中的内容是不可取代的

其本质就是常量值不可修改。
C语言中定义为常量的值,是不允许被修改的,这是一个规则。如果有修改需求,就不要定义为常量,而是定义为变量。
在运行时,常量字符串会被存储于特定的常量空间,这段空间的特性就是只读的,任何修改操作,均会引起整个程序崩溃。这也是C语言保证常量不可修改的一个手段。