在C语言中能否直接给指针指向的数据赋值?为什么?


int *p;
*p=7;
printf("%d",*p);

可以,但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;

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

可以直接给指针指向的数据赋值。

因为*p操作是这样一种运算,返回p的值作为地址的那个空间的取值。存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。

在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。

扩展资料:

两个地方要注意: 

1、在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆;

2、在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。

这点不要和(*)声明符,(&)操作符混淆。

参考资料:

百度百科-指针变量

百度百科-指针

本回答被网友采纳
第2个回答  推荐于2017-11-26
能,一定能。但你int *p;*p=7;这样不行。为什么呢?因为“能直接给指针指向的数据”赋值,而你这里的p还没有指向,所以不能赋值;这种指针有个名字叫“悬浮指针”,俗称野指针,是不能给它赋值的。这样才可以:int a,*p=&a;*p=7;,实际上就是使a等于了7。本回答被提问者和网友采纳
第3个回答  2013-11-03
不行,因为你只是声明了一个int型的指针,代表执行某一块内存,可是并没有说明到底是那一块内存, 所以后面的赋值也是没有意义的,7只是个存放在静态存储区的字面值,是不能这么赋值的。
第4个回答  2013-11-03
*p没有指向内存,要先申请内存,可以这样
#include <memory.h>

int *p = (int *)malloc(sizeof(int));
*p = 7;
printf("%d",*p);

在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语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。这样:char a[6]="hello";a[2]='c';就可以了。这里你为hello分配了一个长度为6的字符数组空间来存放。

C语言指针的赋值问题
int *p;p为指针,地址是未知的,如果直接赋值 p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。可以int *p=&a;或者int *p;p=&a;然后再对p进行操作 有错。注意大小写...

请问C语言指针赋值问题
回答:要是都在一个函数内是不会有问题的。 你的问题应该不在上面所述的部分。

c语言指针赋值问题
请分清“指针本身的值”和“指针指向的地址中的值”这两者的区别。指针本身的值就是地址。int a = 2;int *p = &a;\/\/p = 100; \/\/试图将指针本身的值修改为100,即令指针p指向内存地址100的位置,这是未定义行为*p = 100; \/\/将指针p指向的地址中的值修改为100,即将a的值修改为100 ...

C语言中这样赋值:*pointer_1=100; 这样是否合法啊?谢谢
首先,你要理解,指针变量声明的时候,他并不是一个实际变量,而是存储某一变量地址变量,所以,你在声明的时候就赋值,则编译器不知道这个值到底附给谁.简单的说,指针就是一个地址登记簿,刚创建的时候是空的,然后有个叫老王的来登记,说他家在某某号,他家卖馒头的.所以某某号是变量老王的地址 卖馒头是...

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

C语言指针变量为什么要赋初值?
1、给指针变量赋初值在语法上是没有错误的,编译执行也可以通过,但是一旦代码量增多后,很容易造成指针的错用,为了防止这一问题最好将指针变量定义的时候就置成NULL,这样做是为了代码安全着想。2、指针定义后就会随机指向一个位置的,编译的时候也不会提示错误,程序短很容易找出来,长了多了就难找了...

相似回答