C语言入门篇--变量的左值和右值

 更新时间:2021年08月26日 12:35:32   投稿:newname  
本篇文章是基础篇,适合c语言刚入门的朋友,本文对初识c语言的指针和指针变量做了简单的分析,帮助大家快速入门c语言的世界,更好的理解c语言

在看此块内容前可以先看看内存及地址相关内容,更容易理解。

1.普通变量

一个变量是有三个属性:

1.变量的空间。

2.变量的内容。

3.变量的地址。

空间即若干字节,内容即空间里放了什么,地址即变量对应的空间地址。

#include <stdio.h>
int main()
{
	int a = 10;//定义变量a,开辟4个字节的空间。
	a = 20;//见下述文字解释
	int b = a;//见下述文字解释	
	return 0;
}

一般对于一个变量而言在表达式中的位置就决定了 使用的是变量的空间还是内容:

a = 20;//a为左值,用的是a的空间,把20放到a的空间里。
int b = a;//a为右值,用的是a的内容,把a的内容放到b里。

2.指针变量

看之前可以先看看指针变量有关内容。

2.1初步理解

#include <stdio.h>
int main()
{
	int a = 10;
	int *p = &a;//p指向a,见下述文字解释
	*p=20;//见下述文字解释
	int b = *p;//见下述文字解释	
	return 0;
}

int *p = &a;

//初次定义指针变量p

p为左值,用的是p的空间,此处把a的地址写入p的空间里,此时p指向a

如下图

在这里插入图片描述

p指向a后,*p=20;和int b = *p; 两处的*p代表的是a的空间或内容,

即对指针进行解引用(*p)代表指针所指向的变量,

此时*p就是a,但具体用的是变量a的空间还是内容取决于它是左值还是右值。

*p=20;//*p为左值,即a为左值,所以用的是a的空间,此处把20放入a的空间。

int b = *p//*p为右值,即a为右值,所以用的是a的内容,此处把a的内容放入b的空间。

#include <stdio.h>
int main()
{
	int a = 10;
	int *p = &a;//p指向a
	printf("a的地址=%p,\n", &a);
	printf("a的内容=%d,\n", a);
	printf("p的内容=%p,\n", p);
	printf("p指向的内容=%d,\n", *p);//此时*p为右值,即用a的内容
	printf("\n");
	*p = 20;
	printf("a的内容=%d,\n", a);
	printf("\n");
	int b = *p;
	printf("a的内容=%d,\n", a);
	printf("b的内容=%d,\n", b);	
	return 0;
}

在这里插入图片描述

2.2深入理解

当p指向a后,*p就相当于a,但指针变量p还是p,有其自己的空间和内容。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int *p = &a;//p指向a
	p = &b;//见下述文字解释
	int *q= p;//见下述文字解释
	system("pause");
	return 0;
}

p = &b;//p为左值,用p的内容,此处把b的地址写入p的空间,p指向了b,不指向a了。

int *q= p;//初次定义指针变量q,q为左值,用的是q的空间;

p为右值,用的是p内容(p经过p = &b;语句后,p中的内容为b的地址)

此时指针变量p和q中的内容为b的地址,即指针变量p和q均指向b。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int *p = &a;
	p = &b;
	int *q= p;
	printf("b的内容=%d\n", b);
	printf("p指向的内容=%d\n", *p);
	printf("q指向的内容=%d\n", *q);
	return 0;
}

在这里插入图片描述

以上就是C语言入门篇--变量的左值和右值的详细内容,更多关于C语言变量的资料请关注脚本之家其它相关文章!

相关文章

  • C++算法系列之中国农历的算法

    C++算法系列之中国农历的算法

    这篇文章主要介绍了C++计算中国农历的深入浅析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 
    2018-05-05
  • C语言单链表实现多项式相加

    C语言单链表实现多项式相加

    这篇文章主要为大家详细介绍了C语言单链表实现多项式相加,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 判断机器大小端的两种实现方法

    判断机器大小端的两种实现方法

    第一种方法,思路:利用指针的强制类型转换。第二种方法,思路:利用共用体所有数据都从同一地址开始存储。
    2013-03-03
  • C++的内存管理详细解释

    C++的内存管理详细解释

    这篇文章主要介绍了C/C++中的内存管理小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • C语言实现电脑关机程序

    C语言实现电脑关机程序

    这篇文章主要为大家详细介绍了C语言实现电脑关机程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++ 两个vector对象拼接方式

    C++ 两个vector对象拼接方式

    这篇文章主要介绍了C++ 两个vector对象拼接方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • c语言中malloc、realloc与calloc 的区别以及联系

    c语言中malloc、realloc与calloc 的区别以及联系

    以下是对c语言中的malloc函数,realloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下
    2013-08-08
  • C++实现将长整型数转换为字符串的示例代码

    C++实现将长整型数转换为字符串的示例代码

    这篇文章主要介绍了C++实现将长整型数转换为字符串的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C++对象的浅复制和深复制详解及简单实例

    C++对象的浅复制和深复制详解及简单实例

    这篇文章主要介绍了C++对象的浅复制和深复制详解及简单实例的相关资料,需要的朋友可以参考下
    2017-04-04
  • QT中QChart绘制折线图

    QT中QChart绘制折线图

    本文主要介绍了QChart绘制折线图,Qt Charts基于Qt的Graphics View架构,其核心组件是QChartView 和 QChart,感兴趣的可以了解一下
    2022-04-04

最新评论