C语言字符指针问题

作者&投稿:孛翁 (若有异议请与网页底部的电邮联系)
c语言中,为什么不能对字符指针变量指向的字符串再赋值?~

因为C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。
这样:
char a[6]="hello";
a[2]='c';
就可以了。
这里你为hello分配了一个长度为6的字符数组空间来存放。

扩展资料:给字符数组赋值的方法
1、定义的时候直接用字符串赋值
char a[10]="hello";
注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
2、对数组中字符逐个赋值
char a[10]={'h','e','l','l','o'};
3、利用strcpy
char a[10];
strcpy(a, "hello");

通过char *c="xxx" 声明的字符串xxx存放于常量区中,该区域内存值不可修改,试图修改将会导致程序异常或崩溃。
通过char c[]="xxx" 声明的字符串以数组形式存放于栈中,可像其他变量一样修改。

举一个不是很严谨的例子。假设系统给hello的存储地址是从1开始的。那么h的存储地址是1,e的存储地址是2,以此类推。指针p指向的地址,其实是h的存储地址1。所以你用字符串输出时,用的是指针p。

而*p代表的是1这个存储地址保存的值。那就是h。所以,你输出时,只能用字符输出:%c。

*(p+1)则代表2这个存储地址保存的值。以此类推

printf("%c", *p);  // 结果是h
printf("%c" , *(p+1)) // 结果是e

最后是函数引用问题。这里是否能引用p,是需要看你的函数是怎么写的。比如说你说strcmp。他的原型为

extern int strcmp(const char *s1,const char *s2);

他两个参数均为指针,当然可以直接使用p这个指针作为参数



对。理解正确。


关于C语言的字符串指针的问题?
如果输入12345,那么p指向1,即p中存放着1的地址。没有字符串的指针和指针指向的内容不能修改一说。无论什么类型的指针,只要是“常指针”就有三种情况不可改变:指针是常量——这个指针只能指向申明时指向的目标,不能指向别处。指向的内容是常量——不能通过这个指针改变指向的内容,但指针可以指向别处...

问两道有关c语言字符指针的问题,请将程序每一步的意思告诉我,谢谢啦...
第一题答案:B。理由:*s与*t都是取出此时地址存储的值,while()语句里面的意思是,当指针s与t都不为空并且s指向的值等于t指向的值。。。当s或者t为空或者t与s指向的值不同时,while()结束,返回此时s指向的值减去t指向的值,所以为比较两个字符串的大小;第二题答案:A。理由:x的地址赋值...

C语言字符指针问题
printf("%c", *p); \/\/ 结果是hprintf("%c" , *(p+1)) \/\/ 结果是e最后是函数引用问题。这里是否能引用p,是需要看你的函数是怎么写的。比如说你说strcmp。他的原型为 extern int strcmp(const char *s1,const char *s2);他两个参数均为指针,当然可以直接使用p这个指针作为参数 ...

C语言里为什么字符指针变量指向的字符串常量中的内容是不可取代的?_百...
指向字符串常量的话,这段常量字符串是存储在静态存储区的,内容不能修改。当然你可以让指针指到别的地方

关于c语言指针 字符串 选择题不会 求答案
选择答案B。

c语言指针问题
char *s = "\\ta\\018bc"; 这条语句的意思是:1.定义字符指针变量s的同时,用字符串常量"\\ta\\018bc"对它初始化。实际上,是把字符串中第一个字符的地址赋给指针变量s。2.用字符指针变量s指向一个字符串常量"\\ta\\018bc"。从而,通过字符指针变量s引用字符串常量,进而实现对字符串的相关操作...

C语言中的指针问题到底是怎么回事~
指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如: 例二: 1。 char a[20]; 2。 int *ptr=a; ... ... 3。 ptr++; 在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样...

c语言指针问题
就是 char *p=*s; 或 等价于: 声明 char *p; 语句 p=*s; 让 p 指向 char s[3][8];的始地址 &s[0][0]。 目的是 让 p 有了字符\/字符串存放空间。你也可以理解: p=*s; 即 p= *(s+0); 即 p=s[0]; p=&s[0][0];p 有了字符\/字符串存放空间...

c语言字符串指针的问题,声明是*char="xxxxx"我懂,但为什么printf("%s...
假如char * ch=“1234",那么ch是字符指针,指向'1'的字符 这个时候 *ch 就是字符类型,值就是‘1’这个字符 printf("%c",*ch) 就会显示 1 而printf("%s",ch) 要求输入字符指针,它会根据输进去的指针位置往后寻找字符 一个一个打印输出,直到找到'\\0'结束, 就会显示 1234 如果写反了...

C语言 字符指针问题
是个指向char 的指针,但是你没有初始化, 也就是没有地址。可以定义一个字符数组 char str[20]; 然后 初始化num, 就好了。include<stdio.h> include<stdlib.h> int main(){ char str[20];char* num = str;scanf("%s",num);fflush(stdin);printf("%s",num);return 0;} ...

临泉县13257242828: C语言,字符指针的问题. -
正耿丽科: char * str; //str是一个字符指针,可以把字符串的首地址传给str str="hello";//str指向"hello"的首地址,printf(str)就是"hello",printf(str+1)就是"ello" printf("%c",*str);//输出h printf("%c",*(str+1));//输出e char a[10]="hello";//其实字符数组的名字a就是这个数组的首地址 str=a;//str就指向了"hello",这样printf(str)和printf(a)都是"hello",printf(str+1)和printf(a+1)都是"ello"

临泉县13257242828: C语言中的字符串指针问题 -
正耿丽科: 在编译期间,编译器得到的结果是,指针a和b指向的是静态区间,这段区域是不能随意改变的,而在后续的 while(*p2++=*p1++);中,却给p2也就是b赋值了,这样会出错的,如果一定要做这样的功能,建议在开始声明两个字符串的时候,用char a[]

临泉县13257242828: C语言字符指针问题 -
正耿丽科: #include void find(char *str,char *data){ int i=0; int j=0; int index; int flag=0; while(*(str+i)!='\0') { if(*(str+i)==*(data+...

临泉县13257242828: 关于C语言中指向字符串的指针问题 -
正耿丽科: 指针a和b都指向字符串常量的地址,常量在程序运行过程中是不能被修改的,所以报运行时错误//可以这样//定义字符串存储空间 char a[1024]; char b[1024];//字符串赋值 strcpy(a,"I am a student"); strcpy(b,"I am a teacher"); strcpy(b,a);

临泉县13257242828: 关于c语言字符型指针数组的问题 -
正耿丽科: 一楼正解.pa[2]是一个指向字符串"ccc”的指针;*pa[2]是取字符串"ccc“的首个元素,等价于pa[2][0].int main(int argc, char *argv[]) { char *pa[3] = {"a", "bb", "ccc"}; printf("pa[2] = %s\n", pa[2]); printf("&pa[2] = %x\n", &(pa[2])); ...

临泉县13257242828: C语言指针问题!定义 -
正耿丽科: 1、把s的地址赋给p,也就是p,s指向了同一地址的内存空间2、printf("%d\n",f("goodbye"));输出f("goodbye")函数的返回值,"goodbye"的长度7

临泉县13257242828: C语言中的字符串指针问题 -
正耿丽科: 在编译期间,编译器得到的结果是,指针a和b指向的是静态区间,这段区域是不能随意...

临泉县13257242828: C语言关于指针问题. -
正耿丽科: char *b="xkcnghkj";后面的是常量啊,编译后会把这段常量放在某个段中,然后把b指向该常量所在地址,但是你无法修改里面的值(你可以认为这个段是只读的),但是如果是数组的话,数组比那两是存放在堆栈中的,后面的“”里面的内...

临泉县13257242828: C语言中,定义指针的问题 -
正耿丽科: 问题一是因为,一维数组a[1]代表的是变量,只能用&a[1]取指.而二维数组中a[i]表示的是数组对应行的首地址,所以可以直接赋值给指针.其实我觉得第二个问题的程序有误,char *pp;因该用char **pp; 因为p是指针数组,&p[i]只能赋值给指针的指针.顺便说一下,printf("%s",p)中如果使用%s,表示输出字符串,所以输出函数需要字符串的首地址.而*p指的是p指针所指单元的内容,这是一个字符变量,不是合法地址.

临泉县13257242828: C语言字符串指针的问题 -
正耿丽科: 这个还是很简答的,因为字符串输出时,传递的变量就是地址,而这里p和str都能表示字符串的首地址,所以不需要加*

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网