1楼:会飞的小兔子
1、申请了空间(在常量区),存放了字符串
2、在字符串尾加上了'/0'
3、返回地址,这里就是返回的地址赋值给了p
字符串常量"hello"出现在一个表达式中时,"hello"表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组。
chara[10]=“hello”;//这样可以,这种情况是c语言初始化所支持的,如果写成chara[10],然后a=“hello”这样就错误了。同样是a数组,chara[10]=“hello”;这种是数组的初始化,和a[0]=‘h’a[1]=‘e’,是一个道理。
换成chara[10],然后a=“hello”就不行了“hello”赋值的值是一个地址,而a虽然也有地址,但是这与指针是不一样的,指针的值是地址,而数组的值虽然也是地址,但是却是一个常量,所以不能给常量赋值。
扩展资料
c语言中给指针变量赋值常数注意事项
在使用指针的时候,指针可以自增,而数组不能自增,编译器给数组分配了空间,数组a的地址就是一个常量了,让常量自增这肯定是不行的。 在指针自增的时候,编译器会自动识别类型,比如指针是指向int型的,想获取下一个的地址时,指针直接p++就行了。
特别需要注意的是,在void指针使用的时候,不能使用指针运算,应为void型编译器不能识别类型的长度(即指针所指对象的体积),p++这样就是不合法的,即不能进行数**算,也不能使用*取值操作,想使用必须转换为其它的类型。
2楼:a罗网天下
如:char *p,a='5';
p=&a;
p="abcd";
解析:p申请了空间(在常量区),存放了字符串,所以最后可以返回地址。
以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在**中写
"abcd",那么编译器帮你存储的是"abcd\0"。
1、定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2、空指针
空指针是一个特殊的指针,它的值是0,c语言中用符号常量null(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。
一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3、void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,c语言允许直接把任何变量的地址作为指针赋给通用指针。
但是需要注意void*不能指向由const修饰的变量,例如const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv声明为const void * ptv;,上述第三句ptv = &test才是合法的。
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv;
3楼:匿名用户
赋值当然可以啊,不能用地址引用
举例://int
int * p = new int;
*p = c_int_1; //这个是可以的,赋值p= c_int_1; //这个不可以,地址复制了//字符串
char * p;
p = "abc"; //字符串这样就可以,因为这个常量编译器自动赋予了空间
4楼:今天没有睡
不可以 因为这是不可预见的 如果指到了你内存中的重要消息,电脑可能会出问题啊,所以千万不要赋常数给指针变量
5楼:匿名用户
准确地说,只能赋值0,其他的都不合法
6楼:匿名用户
不能,变量怎么能赋值呢,变量时变化的不是一定值
7楼:匿名用户
只有字符指针可以,直接等于字符串常量
8楼:匿名用户
不可以 指针变量只能指向地址
9楼:情漫都市
一般不允许。很可能系统报错
10楼:匿名用户
指针时用来存放地址的!地址就是个常数啊!所以这样是能编译通过的!
但是,这样执行会出错(段错误)的!因为指针本来是存放地址的,而你却存放了一个常数(即一个不合法的地址),这样就会使指针指向不确定的内存单元(非法访问),从而出现错误!
c语言中对变量赋值0x是什么意思?
11楼:育知同创教育
c语言中对变量赋值0x是以十六进制数作为变量的值进行运算的。一般用来表示内存地址内的。
举例说明:容
定义x:int x = 0x23 ;
这句话的意思跟定义成int x=35一样的。编译器在接收到0x23时就把它当做十六进制数来处理。
12楼:匿名用户
表示0x后面的值为十六进制
c语言中,为什么字符串可以赋值给字符指针变量
13楼:匿名用户
在c语言中并没有bai
字符串这个类型
du。所说的字zhi符串就是字符dao数组。也就是char类型版的数组。
与普通数组不同的,权字符串必须以'\0'作为结束符。
而在c语言中,类型为t的一维数组,其首地址等效于该类型的一维指针,即t*型。
于是字符串,也就是字符数组,首地址就可以当做char *型使用了。
事实上,在库函数以及大多数使用到字符串作为参数的函数中,其参数都是char *型的。
14楼:路图元
p="abcd"; //这句话的意思是把字符串的首地址赋给p!
15楼:匿名用户
单引号和双引号,赋值的时候这个应该有讲究吧!具体忘了,几年没去看了。
16楼:土杜土杜
p = "abcd"; 编译器会将字符串"abcd"的地址放到指针变量p中。p存放的是它的地址,不是值。
17楼:弃婴
字符串常量赋值给指针变量应该就是把它的首地址赋给指针变量吧 。
18楼:五转故剑情深
1. 'a'是字符
常量,bai"a"是字符字面量,一个du加zhi单引号一个加双引号,是两个不dao同的东西不要版搞混了
2.1 字符常量'a'使用整数(字符集
权的数值码)表示,最常用的字符集是ascii码,在ascii码中,字符'a'的值为97,这也是为什么字符可以作加减法运算和比较
2.2 字符串字面量"a",在c语言中作为数组来处理,既然如此,编译器就会把它看作是char *类型的指针。题干中p = "abcd"其实是将"abcd"首个字母的地址赋值给了字符指针变量p,或者说p指向了字符串字面量"abcd"的第一个字符
2.2.1 c语言编译器处理长度为n的字符串字面量时,会为其分配长度为n+1的内存空间,第n+1个位置存放额外追加的空字符(字符串结束的标志)
19楼:
要理解 你要知道 字符串copy 干什么了 双引号 做了3件事
1.申请了空间,存放了字符串
2. 在字符串尾加上了'/0'
3.返回地址
你这里就是 返回的地址 赋值给了 p 希望采纳~~~~~~~~~~~~~~~~
c语言中数组名和指针变量的区别,C语言中数组名和指针的区别
1楼 销 数组名除了sizeof会返回数组大小,其他的实况下是相当于一个指针常量无区别的 指针常量也就是说,不能改变数组名的值,比如int a 10 a a a a 10等都是非法的 c语言中数组名和指针的区别 2楼 匿名用户 数组在当作参数传递时,可以当作指针 当然,参数传递相当于赋值操作,所以用...
关于C语言中long型数据赋给int型变量
1楼 匿名用户 区分编译器类型,long数据赋值给int数据会有不同的结果。 1 16位编译器 int型变量占2字节,long类型变量占4字节。当long赋值给int时,会截取低两字节数据给int。 如long a 0x12345678 int b a 则b的值为0x5678。 2 32位编译器 i...
C语言中如何把感叹号!赋值给字符型常量
1楼 匿名用户 赋值给一个字符型常量是什么意思?c语言中只有变量才能够赋值,如一个字符型变量ch char ch 如是想用一个符号来表示一个常量,可以通过宏定义语句实现,如定义ch为常量 define ch 这样程序中就可用ch表示感叹号了。但是这样的定义在程序中只能做一次,即ch定义后不能再修改。...