C语言指针为什么可以指向字符串常量,却不可以指向整型常量

char * c="hello";这个是没问题的
int * p=&2;这个为什么有问题?

因为指针指向的是地址,常量是不会分配地址,等到使用的时候会被带入使用,你可以这样改就能用指针了:
int a=2;
int*p=&a;追问

扯鸡巴蛋,char * c="hello";那这是什么

追答

字符串直接使用可以代表字符串首地址,因此可以直接赋值给指针变量,但是常数是不可以这样用的。你说话注意点。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-20
系统并没有给2分配空间追问

只有字符串才可以么,为什么这样设计?

追答

字符串存在内存中文字常量区,那个2加上双引号才能看成字符串并且要用字符指针
char *p = "2",用字符串赋值就是把它的首地址赋给指针

追问

整数常量也是存放在data区,为什么不可以int*p=&1;系统这样设计的理由是什么

追答

假设 int *p = &1 合理,那么可以推测出
(1) 每一个整数是不是都改有一个内存地址,你写一个任意大的数( >4G ,32位系统)是不是有存储单元?那么存放整数常量已经把内存占满了

(2) char *q = &c,你说这个c是标识符还是字符常量?

这个整数 1 并不是整数常量,系统没有这样一个存储单元来存放数字,当用它来初始化一个变量后才将整数放入存储单元,

...为何可以把字符串常量赋给字符指针,而整型常量却不能赋给整型指针...
像"hello"这样的字符串,它在C\/C++里的类型是字符数组:char[6](注意,不是const char[6],因为C语言没有这个类型,C++又要向下兼容C)。而字符数组是可以赋给字符指针的。但是const char*是不能贱给char*的。

请问大家个问题:C语言中,字符串可以用指针直接定义,如
1. 首先这并不是用指针定义字符串,只不过是把指针p指向字符串"abcd"的首地址,这个字符串具有一个常量地址,可以读,但是不可写,例如你想进行p[0] = 'e';的操作是不行的。2. 整型数据的问题。其实也不是不可以,你的p是int *类型,而你的10默认是int类型,赋值运算符=要求两边类型一致,...

C语言指针新手问题*pointer_1=100
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int *pointer_1 =0;除外,该语句表示指针为空)。此时,*pointer_1 只是表示定义的是个指针变量,并没有间接取值的意思。 当“=”的左操作数是*pointer_1时,改变的是pointer_1所指向的地址存放...

c语言程序指针问题
C语言规定,一个指针变量只能指向同类型的变量,不能时而指向一个整型变量,时而 指向一个字符型变量。当然,如果程序中确实需要进行不同类型的 指针变量进行赋值时, 则需要进行强制类型转换。3、混淆指针变量和它所指向的数据而导致程序错误如在程序main(){int ...

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

C语言,参见位运算的操作数必须是整形常量或变量?为什么?其他类型的...
C语言中整型常量才能进行位运算,这是这个语言所作出的限制,与计算机没有什么关系。它如果被设计成允许其他类型数据可以进行位运算,也是可以的。只是由于数据保存方式的特殊性,其他类型数据做位运算从可理解性和实现效率方面来说,都有缺点,所以不适合做位运算。你可以查阅一下float型在内存中具体是怎么...

指针和常量整型
所以这个指针是可以改变的,只不过不能通过指针修改指向的int.所以如果有类似*limitp=12这种修改指针指向内存的操作,就会报错。这种limitp=&i;写法是正确的,而且C语言中也常这样用。因为limitp是指针。&i也相当于一个指针。因此完全是可以赋值的。const仅说明,你不能通过改指针修改它指向的值。并不...

c语言指针能不能用整形数据赋值
可以,现在的编译器会自动将赋给指针的整形数据强制转换成指针类型的。在32位系统下,一个指针本来就是一个32位整数,只是这个整数是某个变量的地址。

为什么不能用二进制表示整型常量?
因为因为计算机所有信息(包括数据和指令)都是采用二进制编码的(就是说计算机只能识别和执行由来0,1组成的二进制的指自令)。C语言中有编译过程,实际就是把源程序翻译成二进制形式的目标程序。(1)十进制整型常量由一串连续的0~9数字组成。如: 0、120、 365、-12等。(2)八进制整型常量以数字0...

指针、引用和常量的关系
接着,常量概念的引入使得变量的值不能被改变。常量可以是变量、指针或引用,但不能是引用类型,因为引用本身就是绑定到一个变量的,无法再成为另一个常量的一部分。例如,定义“int *const p = &val;”时,从左至右理解,“const”表明p是一个常量指针类型,而“*int”表示p作用于整型指针。从...

相似回答