C/C++ 变量的本质及数据类型杂记

1.变量的本质是 一段内存的别名。
2.由于C语言有些东西没有规定死,所以在不同编译环境下可能会出现不一样的情况。以下列举(遇到就补充):
①.需要注意自己的编译环境是64位,还是32位的(16位及8位的现在很少了)。不同的环境可能会使有些数据类型的长度不同.(话都这么说,可是我没有实际上遇到过(苦笑),不过下次移植别人的代码不成功可以考虑这方面的因素。)
3.一般再对数据进行操作之前,要对数据进行有效性验证,因为如果是无效数据,后面的计算会浪费资源。
4.sizeof是运算符,用来计算数据类型或者变量等占用的字节数。
以下是示例。

#include <iostream>
using namespace std;
int main() {
	int* p = NULL;   
	int a = 10;
	char b = 'c';
	const char* r = "asdfdfghj";   //"asdfdfghj"是字符串常量,保存在全局区
	p = &a;
	cout << sizeof(a) << endl;
	cout << sizeof(b) << endl;
	cout << sizeof(r) << endl;
	cout << sizeof(p) << endl;
	return 0;
}

输出结果分别是4 1 4 4
①.int型占四个字节,char型占一个字节。好理解。
②.r是指针,p也是指针。他们占四个字节。原因是我是在x86环境下编译的,且它们存的是地址,32位等于四字节。
5.以下两者相同,(关于数组的详细解释,见另一篇博客)

void printArray(int a[], int num);
void printArray(int *a, int num);  

因为数组名记录首地址,而*a也是取地址。
6.void用法:
①.不能直接定义变量。
②.通常用于万能指针。

void* p = NULL;
p = (char*)malloc(100);

p是万能的指针,可以接malloc申请的任何类型的空间。这里的malloc函数返回值是char*(在成功的情况下)。最后记住要free()。
7.可以设置内存对齐方式
如 pragma pack(1) //按一个字节对齐
(ps:给代码加注释特别重要我这方面也需要加强。)
8.关于getchar()函数的理解:getchar()是C语言中的一个函数,可以用来给字符赋初值。(参见菜鸟教程的例子。)这里要说的是下面这个问题。当程序在调用getchar时,程序就等待用户按键并将输入的字符(意思是你输入的东西会被看成字符)存放在键盘缓冲区,该函数的返回值是我们输入的第一个字符的ASCII码,出错返回-1。如果,我们输入不止一个字符,其他的字符会保留在缓冲区内,等待后续getchar()调用。并且,后续的getchar()调用不会等待用户按键,而是直接读取缓冲区的字符,直到缓冲区为空,才等待用户按键。
9.字符与整型可以互相转化,这个比较简单,直接用ASCII码即可,并且一般也不需要使用函数。但是涉及到字符串就很麻烦。(此处待补充字符串相关知识)

(本文整理自多个网络平台。谢谢阅读!)

发布了27 篇原创文章 · 获赞 0 · 访问量 429

猜你喜欢

转载自blog.csdn.net/weixin_40007143/article/details/103688847