指针变量能直接赋值吗?

作者&投稿:地雷 (若有异议请与网页底部的电邮联系)
在C语言中能否直接给指针指向的数据赋值?为什么?~

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

扩展资料:注意事项
也可以使用赋值运算符为指针变量赋值,但要保证两个指针变量的类型相同。
假设有如下变量定义:
int i,j,*p,*q;p=&i;q=&j;
这两句将变量i和j的地址分别赋值给指针变量p和q;
执行了q=p后,执行该条语句,指针变量p和q都指向了同一个变量i,因此指针变量p和q中存放的都是变量i的地址&i。变量i此时并没有初始化,只为其分配了内存单元。
注意理解:q=p;和*q=*p
前者为指针变量q赋值,即将指针变量p中存放的某个变量的地址赋值给q。显然,赋值后,q和p就指向了同一个变量。
后者将p指向变量的赋值给q指向的变量。
例子:
p=&i;
q=&j;
i=2;
j=3;

指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等。但是null是一个空地址,即0,它不指向任何地址,所以可以赋值为null

指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等。但是NULL是一个空地址,即0,它不指向任何地址,所以可以赋值为NULL

p=NULL;是空指针 这个指针没有任何用 但是是最安全的
因为当一个指针不用以后 如果不把他指向0 他很可能与别的地址相同

那样就遭了 而指向0却不会出现这种问题

int * p;
p=2000;这种有可能通过编译 但是这是极其危险的做法 绝对不能这样做
指针只能赋予相应的指针值 或者是0空指针
因此只能表示为
int * p;int a;
p=&a;
或者
p=0;

0地址特殊?否!这只是个习惯用法。
0 作为空值是有意义的,
因为通常变量的地址不会为0;
对intel86系列CPU来说这里是中断向量表,用户代码是不会改动它的。
其他系统只怕也会一样的,因为C最早并不是用于DOS,WIndows。
而是用来编写UNIX操作系统的;并随操作系统一起发布的。
早期的UNIX并不是在IntelCPU上实现的。
事实上0地址,是可以读取的。当然如今操作系统可能会保护这段内存。
用户态代码只怕不能读取了。

不能 , NULL代表空地址,是指没有 不是0的意思;

可以的。 在pc上你设置一个指针等于2000跟设置它等于0实际上是一样的


C语言中,定义一个指针的时候为这个指针开辟存储空间吗?
这时为这个指针分配了存储空间。但这时其中是随机数,我们称它为指向一个不确定的内存地址。用户说的“直接*p=5”,那么就会在一个无法预知的内存地址写入一个整型数5。这是不允许的,可能导致程序崩溃。p=&a; 则是把已有的变量a的地址写入指针p,我们称使指针指向a. 可以通过p对变量a正常操作。

a为int型变量,执行赋值语句a=5<<2后,a的值。 答案20,米看懂是嘛意思_百...
5<<是左移两位两位的意思。只有在二进制中才有左移右移运算,每左移一位,原数乘以2,左移两位后赋值给a,相当于5*2*2 , a=5*4 , 结果是20.

c语言为什么说指针是灵魂?能简单举个例子吗?谢谢
2.数组定义的是一组连续的内存空间,可以说每个单元都有自已的变量名(数组名+下标)……这样如果执行越界操作时,程序将会报错……3.还有就是用数组申请一组连续的内存空间明显要比用指针动态申请空间要简单得多……4.再者数组是用到很多的,如果你全部都用针指来代替,我们知道执行指针是危险的,多...

char型变量可以赋值为数组吗
char型变量只有一个字节,所以只能赋一个字符给它,例如:char x='a'。定义一个char型变量,想赋值为ABC,是不可以的。可以将字符串赋值到一个字符型数组中去,例如:char x[4]="ABC",注意这里字符串虽然看起来只有ABC三个字符,但是实际上末尾还要加上一个‘\\0'的,所以这里数组元素个数为4,...

c语言为什么说指针是灵魂?能简单举个例子吗?谢谢
2.数组定义的是一组连续的内存空间,可以说每个单元都有自已的变量名(数组名+下标)……这样如果执行越界操作时,程序将会报错……3.还有就是用数组申请一组连续的内存空间明显要比用指针动态申请空间要简单得多……4.再者数组是用到很多的,如果你全部都用针指来代替,我们知道执行指针是危险的,多...

c语言中要求对变量作强制定义的主要理由是什么
例如,如果你试图将一个浮点数赋值给一个`int`类型的变量,编译器会提示类型不匹配,这有助于及早发现并修正问题。最后,强制定义变量类型还有助于优化程序的性能和内存使用。不同的数据类型在内存中占用的空间不同,显式指定变量类型可以让编译器更有效地分配内存。例如,`int`类型通常占用4个字节,而...

玩转typescript类型
null和undefined都是空值,但因为在JavaScript中typeof操作符的行为,未定义的变量和定义了但未赋值的变量都是undefined,所以推荐定义了变量之后不会即刻赋值时,设置空值为null,这样可以区分开typeof的行为,当然这样可能会引入另一个问题,即typeofnull为object但依旧推荐这样做,可以在判断空值时直接使用foo!=null。 Unknown...

SQL Server 表变量和临时表的区别
但是表变量不能在类似“SELECT select_list INTO table_variable” 这样的语句中使用。而在SQL Server 2000中,表变量也不能被用于“INSERT INTO table_variable EXEC stored_procedure”这样的语句中。 表变量不能做如下事情: 1.虽然表变量是一个变量,但是其不能赋值给另一个变量。 2.check约束,默认值,和计算列...

C语言中,关于指针传递的一个问题,求高手解?
(int i=9;int* i_p=&i;这样i_p就指向i);之后就可以通过*来获取到i的值;(printf("%d\\n%d",*i_p,i))会输出两个一模一样的值,不,该说是输出同一个值两次.仔细分析之.int i;声明变量int整数,分配地址.赋值9,将值9丢到地址中;int* i_p=&i;同样声明变量int指针,分配地址.赋值i的...

为什么说Python采用的是基于值的内存管理模式
(1)垃圾回收 (2)引用计数 (3)内存池机制 一、垃圾回收:python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对Python语言来讲,对象的类型和内存都是 在运行时确定的。这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存...

调兵山市17593968337: 指针变量可以直接赋值吗 -
蓟哪新格: 指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等.但是NULL是一个空地址,即0,它不指向任何地址,所以可以赋值为NULL

调兵山市17593968337: 能不能直接给指针赋数值? -
蓟哪新格: 不可以...仔细阅读c语言的书

调兵山市17593968337: 变量指针是不是可以赋值给常量 -
蓟哪新格: 不可以啊,你都说了,一个是指针变量,一个是常量,怎么能赋值呢?你的一句话有两个问题,第一常量是不能被赋值的,如果能再赋值的话就是变量了,指针赋值给变量,要看变量类型,如果变量类型不是指针类型,那也不能赋值,赋值当然要类型相等了啊.int *b=0x00000000,int c = *b,这样是可以的.

调兵山市17593968337: 可以对指针变量进行赋值吗,例如*p=1 -
蓟哪新格: *p = 1,表示将1赋值给p 所指的变量或地址空间,在这步上面肯定有*p的初始化或已赋地址.不然你直接这样写肯定是错的.

调兵山市17593968337: 指针变量不能直接赋地址值对不? -
蓟哪新格: char a[5] = {'a','b','c','d','e'}; char*p = a; 可以,你说的直接赋地址是什么意思?可以的,不过很危险,你会修改其他变量的内容 如下,运行正确:#include <iostream> using namespace std; int main() { char a[5] = {'a','b','c','d','e'}; char*p; p = (char*)0x0012fecd; cout << &a << "||" << p << endl; }

调兵山市17593968337: 可以不可以直接给指针赋值内存地址比如0x00000000,如何可以该如何写. -
蓟哪新格: 用不用malloc,要看指针变量的具体用途.简单的说如果要给其一个单独的新值,是必须用malloc分配内存的.如果要给这个指针变量一个已经存在的值,则不需要.简单的说赋值是拿别人的东西自己来用,而不需要管这个东西怎么来的.当然这还要考虑你的赋值操作是否合乎逻辑,合乎语法,是否有意义.而内存分配完毕是必须进行赋值操作的,否则你的内存分配操作就无意义且是非常危险的行为.分配内存是用于存放某些值的.犹如鸡要下蛋,需要先有一个窝.这个窝是需要你事先建好.否则鸡会四处下蛋.

调兵山市17593968337: C语言中可以把指针类型变量赋值给指向指针的指针型变量吗 -
蓟哪新格: 指向指针的指针型变量也是指针变量.当然可以赋值.只是你的指针变量必须先指向一个地址的前提下.

调兵山市17593968337: 将一个指针变量赋值给另一个指针变量 -
蓟哪新格: int *p1,*p2; int i=1,j=2; p1=&i; p2=&j ;*p1=*p2 ; //此时的*p1就是i *p2就是j 改变的是:p1所指向的地址中的值! 如果修改p1的地址,则应该是:p1=p2 ;PS: *是引用地址数据运算符,其后只能跟指针变量,表示引用地址中的数据

调兵山市17593968337: 指针为什么能直接赋值啊 -
蓟哪新格: int* c=(int*)100; 这里 声明 c 是指针,指向int 型. (int*) 是强制转化运算. (int*)100; 把地址值 100 强制转化为 int 型 的 地址.地址运算中增 1,等于 地址增加 sizeof(int). printf("%d", c); 这是按 10进制整型 输出 c 指向的地址值. 如果是: int a=200; int* c=&a; printf("%d", c); 输出c 指向的地址(即 变量 a的地址) printf("%d", *c); 输出c 指向的地址(的那个单元里)存放的数值 (200). 要分清 地址值 和 那个地址里存放的数值.一个是房间号码,另一个是房间里存放的东西.

调兵山市17593968337: c++中指针赋值问题? -
蓟哪新格: 这么写肯定不行啊.你首先应该知道指针到底是什么.指针就是保存某一个变量的地址的一种类型,换句话说,指针就是指向内存中的一块地址的变量.我们定义指针可以这样:int a; int *p = &a; 这一句就让指针p指向了a在内存中的位置.int ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网