C语言中可以给指针变量赋值常数吗

2021-06-25 14:44:50 字数 3750 阅读 6714

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定义后不能再修改。...