c语言,char a[10],*p; p=a=”china”; 为什么是错的?请详解

作者&投稿:寿宙 (若有异议请与网页底部的电邮联系)
c语言,char a[10],*p; p=a=”china”; 为什么是错的?请详解~

a表示数组的首地址
p是一个指针变量,可以将数组的首地址赋值给p,
所以p=a;是正确的
但是a=
"china"却不行,因为字符数组a是作为字符串常量存在的,只能在定义的时候赋值,
不能像这样在后面对数组进行赋值操作

p=a是对的!也可以写成p=&a[0]
p是指针,指向一个地址,数组名就是它的第一个元素的地址。
a="china"把字符串赋值给一个地址,显然是不对的!
可以这样char
a[10]="china",或是*p="china"

a表示数组的首地址
p是一个指针变量,可以将数组的首地址赋值给p, 所以p=a;是正确的
但是a= "china"却不行,因为字符数组a是作为字符串常量存在的,只能在定义的时候赋值,
不能像这样在后面对数组进行赋值操作

这里的错误是:数组是不能整体引用的,不能a="china";,应该是a[]="china";程序应该改成:char a[10],*p;a[]="china";p=a;

应该选d。p是指针变量名,可以把地址赋给指针变量,只能逐个引用数组元素的值而不能整体引用,更不能对整个数组进行自增或自减,没有c这种初始化形式,d是用自符串常量来初始自符数组,前三个元素为mba,第四个为反斜杠0,后六个为空自符。

p是指针,不能直接赋值
可以如下赋值:
char a[10],*p;
a="china";
p=a;

p和s都是地址,所以不能赋值China,只能同样赋值一个地址


文峰区13632015471: 请解释一下C语句"char a[10],p;p=a=“china”"的含义. 下列说明不正确的是: ( -
东恒盐酸:[选项] A. )char a[10]=“china” ( B. )char a[10],p=a;p=“china” ( C. )char p;p=“china”( D. )char a[10],p;p=a=“china”;

文峰区13632015471: 执行语句“char a[10] ={"abcd"},*p=a;”后,*(p+4)的值是( ) -
东恒盐酸:[选项] A. "abcd" B. 'd' C. '\0' D. 不能确定

文峰区13632015471: 请解释一下C语句"char a[10],??p;p=a=“china”"的含义. -
东恒盐酸: char a[10], *p; p = a = "china"; 是错的赋值!~ 原因: char *p; p = "china"; 这里的p是在静态区分配的内存,也就是说p是指向字符常量的指针. 而在p = a = "china";中,"="运算符是从右向左结合的,所以是将"china"的首地址赋值给a,而a是char型数组的首地址,这是把字符常量的地址赋值给字符变量,所以错误!~

文峰区13632015471: c语言,若有定义:char *p(char[10]);则p是函数名.这个对吗?为什么? -
东恒盐酸: 这样写的话,p虽然是函数名,但这样 是函数的声明形式,不是定义(没有函数体)

文峰区13632015471: C语言题,关于指针的基础题下面说明不正确的是_______. A) char a[10]= "china"; B) char a[10], *p=a; p= "china"; C) char *a; a= "china"; D) char a[... -
东恒盐酸:[答案] D 是错误的,数组不能用赋值号运算.

文峰区13632015471: C语言字符型数组的指针怎么定义 -
东恒盐酸: char *p; p = (char *)a; p = (char *)&a; p = a[0]; p = &a[0][0]; p = (char *)&a[0]; 本人亲测,以上五种情况p都是指向a的首地址.

文峰区13632015471: char **p在c语言中 是定义一个二维的指针数组的意思吗? -
东恒盐酸: **p是二级指针的意思,也就是指针的指针. 当然可以用char **p;去定义一个二维char数组. 只不过要用到malloc动态申请内存来放二维字符数组. 格式如下: #include "stdio.h" main() { char **p; int i,j; int row,rank; //输入二维数组的行数和...

文峰区13632015471: C语言Char指针 -
东恒盐酸: cout<<操作符的问题· 当<<跟的是char*的话,就输出字符串 p和&a[0]是char*类型,所以是输出数组的整个字符串 cout<<(void*)p<<endl;//可输出p的内容,即数组的首地址 cout<<&a<<endl;//输出a的首地址

文峰区13632015471: C语言,用指针指向一个地址,从这个地址开始输入数据,超过五个出错 -
东恒盐酸: char *p=&a;//p指向的是a的首地址.当你++后,便指向它的下个地址,这样是不安全的,也就是说非法的指向了不属于你的内存(因为你p只拥有a这个内存).前面5个数对,只是意外.你要输入多个字符都是正常的,那必须给p分配足够的内存空间.比如讲a定义成数组,或者malloc内存.

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