C语言中可以给指针变量赋值常数吗?
C语言中可以给指针变量赋值常数。
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++这样就是不合法的,即不能进行数学运算,也不能使用*取值操作,想使用必须转换为其它的类型。
参考资料来源:百度百科—c语言
C语言中可以给指针变量赋值常数。
如:
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;
参考资料来源:百度百科—指针变量
举例:
//int
int * p = new int;
*p = C_INT_1; //这个是可以的,赋值
p= C_INT_1; //这个不可以,地址复制了
//字符串
char * p;
p = "abc"; //字符串这样就可以,因为这个常量编译器自动赋予了空间