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

如题所述

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

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++这样就是不合法的,即不能进行数学运算,也不能使用*取值操作,想使用必须转换为其它的类型。

参考资料来源:百度百科—c语言

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-10

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;

参考资料来源:百度百科—指针变量

本回答被网友采纳
第2个回答  2019-07-23

C语言中可以给指针变量赋值常数,赋值方法为:

1、首先打开Microsoft Visual C++软件,单击“文件”菜单->“新建”,新建一个文件,文件名后缀为.c。

2、新建好文件后,输入如下内容。

3、然后我们在{  }之间输入函数的内容,我们先定义变量c1,变量的类型为char,字符型。

4、然后,我们用printf语句进行输出。

5、当内容输入好后,我们点击图中工具按钮,对程序进行检测,如果没有错误,会得到下图所示效果(红线画出)。

6、检测到没有错误后,点击运行(红色感叹号),弹出的黑色窗口中为最终结果,可以看到大写字母“A”显示在上面。

本回答被网友采纳
第3个回答  2012-04-07
赋值当然可以啊,不能用地址引用

举例:
//int
int * p = new int;
*p = C_INT_1; //这个是可以的,赋值
p= C_INT_1; //这个不可以,地址复制了

//字符串
char * p;
p = "abc"; //字符串这样就可以,因为这个常量编译器自动赋予了空间
第4个回答  2012-04-06
不可以 因为这是不可预见的 如果指到了你内存中的重要消息,电脑可能会出问题啊,所以千万不要赋常数给指针变量

C语言中可以给指针变量赋值常数吗?
C语言中可以给指针变量赋值常数。1、申请了空间(在常量区),存放了字符串 2、在字符串尾加上了'\/0'3、返回地址,这里就是返回的地址赋值给了p 字符串常量"hello"出现在一个表达式中时,"hello"表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。所以,可以把字符串赋值给...

在C语言中能否直接给指针指向的数据赋值?为什么?
可以,但int *p;*p=7;这样不行。因为“能直接给指针指向的数据”赋值,而这里的p还没有指向,所以不能赋值,这种指针有个名字叫“悬浮指针”,是不能给它赋值的。这样才可以:int a,*p=&a;*p=7;实际上就是使a等于了7。

在C语言中能否直接给指针指向的数据赋值?为什么
可以直接给指针指向的数据赋值。因为*p操作是这样一种运算,返回p的值作为地址的那个空间的取值。存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址...

c语言中 能否用scanf给指针型变量赋值
应该为scanf("%d",(int)&p),因为你的p没有分配内存空间,不能直接往里面写入值,要和普通整型赋值一样加&

关于c语言指针的声明与赋值
在C语言中,指针是具有指向其他变量地址的能力的特殊类型变量。指针的声明与赋值是程序设计中常见且至关重要的操作。LZ提到的两种写法分别展示了指针声明与赋值的不同方式,它们在表面上看似等价,但实际用途与意义存在细微差异。首先,让我们回顾指针的声明与赋值的基本概念。声明一个指针变量,即是定义一个...

C语言中能不能将一个整数赋给一个指针变量?
在某种场合,把常量赋给指针变量是可以的,例如:int a=10,p ;printf("%d",&a);在以上代码输出a的地址值之后,譬如:1244996 以上程序可以改为:int a=10,*p;p=1244996;printf("%d",*p);输出10

c语言中能把指针变量赋值给指针变量嘛?
指针变量赋值给指针变量 是可以的。我想补充楼上的 1、就是这两个指针变量同时指向一个地方 内存 2、指向指针的指针的指针是二级指针。它指向指针。到看你怎么用了

C语言指针变量的赋值和做函数的参数
int x ;int * px=&x ; \/\/定义时赋值,也称初始化,注意这里的*是跟随int的,即变量px是int *类型变量! 实际上的赋值语句是px=&x ;int * py ;py=&x ; \/\/单独赋值,将py指向x*py=10 ; \/\/这里的*,是引用指针中的数据操作符,*跟随的变量必须是指针类型变量,否则会出错! *py就...

C语言中这样赋值:*pointer_1=100; 这样是否合法啊?谢谢
是可以的 如果前面定义过,直接这样也合法 好吧,前面我不知道你要做指针 指针相关有两个重要的运算符 1."*"一元运算符,名称为间接寻址运算符,当它作用于指针时,将访问指针所指向的对象.2."&"一元运算符,名称为取地址运算符,当它作用于指针变量时,将取出该变量的物理地址.指针定义 int *pointer_...

c语言 指针如何赋值
1、变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。2、为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”。3、定义指针变量.对...

相似回答