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

如int *p;*p=7;printf("%d",*p);
2024-11-06 11:07:51
推荐回答(5个)
回答(1):

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

回答(2):

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

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

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

扩展资料:

两个地方要注意: 

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

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

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

参考资料:

百度百科-指针变量

百度百科-指针

回答(3):

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

回答(4):

不行,因为你只是声明了一个int型的指针,代表执行某一块内存,可是并没有说明到底是那一块内存, 所以后面的赋值也是没有意义的,7只是个存放在静态存储区的字面值,是不能这么赋值的。

回答(5):

*p没有指向内存,要先申请内存,可以这样
#include

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