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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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;

参考技术A

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

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

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

扩展资料:

两个地方要注意: 

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

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

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

参考资料:

百度百科-指针变量

百度百科-指针

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

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

C 语言指针数据类型 ( 指针类型变量 与 指针指向的内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )





一、指针类型变量 与 指针指向的内存块 概念区别



指针类型变量指针指向的内存块 概念区别 :

给定一个指针类型变量 :

// 定义一个普通整型变量
int a = 888;
// 声明 指针类型变量
// 将整型变量地址赋值给指针类型变量
int *p = &a;

1、指针赋值


给指针赋值 : 给上述指针变量 p 赋值操作 , 如 p = 0x7F451D12 , 只改变指针变量 p 的值 , 没有改变指针变量 p 原来指向的 内存块 中存储的值 ;

char *p1 = (char *)malloc(100);
*p1 = (char *)malloc(100);

上述操作中 , 第二次赋值 , 指针变量改变了 ; 此时


2、指针运算


指针算术运算 : 对上述指针进行算术运算 ,

p + 1

p++

的计算结果是指针的地址值加上指针类型对应的字节大小值 , 如果是 int 类型的指针 , 则增加 4 4 4 字节 ;


3、内存赋值


** 给指针指向的内存赋值 😗* 给上述指针变量 p 指向的内存 进行赋值操作 , 如 *p = 0x7F451D12 , 不会改变指针变量 p 的值 , 只会改变指针变量 p 原来指向的 内存块 中存储的值 ;


4、内存取值


指针指向的内存赋值与取值 :

  • 给内存赋值 : *p 如果在 等号 = 左边 , 则表示给 指针 指向的 内存 赋值 ;
  • 从内存取值 : *p 如果在 等号 = 右边 , 则表示从 指针 指向的 内存 取值 ;

5、内存修改注意事项


修改内存注意事项 : 给指针赋值时 , 要 确保指针指向的 内存 可以修改 , 全局数据区 中的 常量区 的值 不能修改 , 代码区 中的值不能修改 , 堆区 和 栈区 中的值 , 即使能修改 , 也要确保指针是正确的 ;

最容易出错的情况是 , 指针指向 字符串常量 , 强行修改该指针指向的内存 , 会导致出错 ;

下面的代码中 , 就会出现问题 ;

char *p = "abc";
*p = "123";

以上是关于在C语言中能否直接给指针指向的数据赋值?为啥?的主要内容,如果未能解决你的问题,请参考以下文章

c语言char和int可以互相赋值,但指针不能赋值,char *和int *不能直接赋值,为啥呢?谢谢

在C语言编程中,为啥要将指针变量在开始的时候赋值为NULL?

C语言中学指针时*和&是相互补充的,为啥啊?

C语言指针变量为啥要赋初值?

在c语言中整形变量的指针能否赋值给整形变量?

求解答C语言“指针赋值”?