Record19—const做函数参数

安稳与你 提交于 2020-01-11 06:19:48

目录

Const的五种使用情况

Const的使用本质

总体代码


Const的五种使用情况

const在C与C++中是不同的,

先看两种写法:

const int a; 
int const b; 

这两种写法都是对的,也是一样的,代表一个整型变量不能被修改。

再看:

const char *c;
char * const d; 

这两种写法也是对的,但代表的意义是不一样的。其中,c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改);d 是一个常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)等同于定义一个"char buf[100]"

总结:先要明白指针变量和它所指向的内存空间变量,是两个不同的概念,那么看const的时候,就看是针对的是指针变量还是针对的是指针变量指代的内存空间。

看const 是放在*的左边还是右边 看const是修饰指针变量,还是修饰所指向的内存空变量

还有最后一个用法:

const char * const  e ;

这么写,意味着e是一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改)

 

下面举例说明:

void getmeml201(const char *p)
{
	p = 1;
	p = 3;
	//指针指向的内存空间不能被修改
	p[1] = 'a'; //报错
	return;
}

这段代码和上面的变量d是一种情况,指针指向的内存空间不能被修改,所以,在这段代码中修改p本身这个指针变量,是不会报错的,但修改p[1],即p指向的内存空间,就会报错。

同理,把const修改是部分变成指针变量,上面的这种情况,就正好反了过来:

void getmeml202(char const *p)
{
	p = 1; //报错
	p = 3; //报错
	//
	p[1] = 'a';
	return;
}

要是,都给const住了,就只能拿值,不能改值了:

void getmeml203(const char const *p)
{
	//p = 1; //报错
	//p = 3; //报错
	//p[1] = 'a';
	printf("%c", p[1]);
	return;
}

Const的使用本质

那么下面再看一个:

void main()
{
	const int a = 10;
	a = 11;

	printf("hello...\n");
	system("pause");
	return ;
}

这样是不能被修改的,因为a被const给限定了,但是:

void main()
{

	int *p = &a;
	*p = 100;
	printf("a:%d", a);

	printf("hello...\n");
	system("pause");
	return ;
}

通过引用指针的方式,再去改变a,竟然成功了!这说明,在C语言里面,const是一个伪命题,是一个冒牌货,并非如我们所想象的那样稳定,C语言中的const修饰的变量,是假的!

总体代码

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void getmeml201(const char *p)
{
	p = 1;
	p = 3;
	//指针指向的内存空间不能被修改
	//p[1] = 'a';
	return;
}

void getmeml202(char const *p)
{
	//p = 1; //报错
	//p = 3; //报错

	p[1] = 'a';
	return;
}

void getmeml203(const char const *p)
{
	//p = 1; //报错
	//p = 3; //报错
	//p[1] = 'a';
	printf("%c", p[1]);
	return;
}

void main01()
{
	char *p1 = NULL;
	const char *p2 = NULL;
	p2 = 1;
	return;
}

void main()
{
	const int a = 10;
	a = 11;
	{
		int *p = &a;
		*p = 100;
		printf("a:%d", a);
	}

	printf("hello...\n");
	system("pause");
	return ;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!