C++中为什么在给数组赋值的时候程序中多定义了一个值出现了吃内存的情况?

为什么在给数组赋值的时候程序中多定义了一个值出现了吃内存的情况?
就因为我多定义了int类型的b,注释int b = 80;后不会出错。
还有为什么我不能通过*val1 = &b; 把a的地址赋值给指针变量val?
我是初学者,C语言不怎么懂,C++刚开始学一天。
我的代码如下:

//指针学习//
#include <iostream>
using namespace std;
int main ()
{
int a = 90;
int b = 80;
int *var1;

cout << "&var1 指针的地址: ";
cout << &var1 << endl;

cout << " var1 指向的地址: ";
cout << var1 << endl;

cout << "*var1 变量的值: ";
cout << *var1 << endl;

var1 = &a;

cout << endl;
cout << "把a的地址值赋值给指针指向的地址val1:var1 = &a ";
cout << endl;
cout << "&var1 指针的地址: ";
cout << &var1 << endl;

cout << " var1 指向的地址: ";
cout << var1 << endl;

cout << "*var1 变量的值: ";
cout << *var1 << endl;

cout << "a的地址: ";
cout << &a << endl;

cout << "a的值: ";
cout << a << endl;

*var1 = a;

cout << endl;
cout << "把a的值赋值给指针变量*val1:*var1 = a ";
cout << endl;
cout << "&var1 指针的地址: ";
cout << &var1 << endl;

cout << " var1 指向的地址: ";
cout << var1 << endl;

cout << "*var1 变量的值: ";
cout << *var1 << endl;

cout << "a的地址: ";
cout << &a << endl;

cout << "a的值: ";
cout << a << endl;

cout << "在声明指针变量的同时只能赋值地址 ";
cout << endl;
return 0;
}

1、定义b,你没有用到它,编译器会警告(warning)你,不会报错(error),还是能运行。
2、*val1 = &b 类型不一样,左边是int类型,右边是地址,正确的写法是val1 = &b。追问

至于程序跑飞我知道原因了,因为指针变量定义后没有初始化所以会报错,书上都说,这是个很危险的操作。
*val1 = &b,我是想把b的地址强制转换成int赋值给指针变量,可能我的操作是不允许的。
还有麻烦帮我看看我对指针的理解,就是打印的那些中文的解释有没有理解错误的地方。
谢谢你

温馨提示:内容为网友见解,仅供参考
无其他回答

C++中,往一个一维数组中连续输入数值,为什么在超过数组元素个数后还能...
我记得我老师讲过c\/c++不提供数组下标的越界检查,所以你的假设编译时编译系统时不会给任何错误信息。如果你在程序中只是定义了一个数组应该不能输出的(我的理解)。是要是你不止定义了这一个数组的话,那么就可能出现你说的那种现象。因为自动变量在系统内存中的存放次序并没有统一的规定,但系统在...

c++对数组的赋值出现异常?
double C[3][3];共有9个元素,索引是,[0][0] -- [2][2],不存在[0][3]、[1][3]、[2][3]、[3][0]、[3][1]、[3][2]、[3][3]这样的索引。一般的说,对于数组a[m][n],其索引范围是a[0][0] -- a[m - 1][n - 1]。

在C++中利用循环语句给数组赋值,一次输入一个数,一直全部输完。程序如下...
一:标准输入函数cin 不知道说它是个函数对还是不对,它是代表标准的输入设备--键盘。他是属于流的,他的用法和流的用法是一样的。也就是:cin>>变量;小小的说明一下,输入多个变量可以写在一行,如:cin>>x>>y>>z;这样写不是不允许,而是不好看,如果是不同的变量类型,那就更是没头没脑了。

C++中字符串给数组赋值问题,下面的程序,后面输出有乱码,请问如何解决...
建议你用memset将a数组初始化为全部的都是'\\0',然后再进行后面的操作。。因为size()得出的结果是5,也就是没有将str的最后一个'\\0'算到大小内,所以a[5]以及后面的是随机值。。是乱码的。。

C语言中定义数组时方括号里的数多些有什么影响。。
数字越大分配的内存空间越大,如果写的数字过大可能会导致程序崩溃(比如999999999这种),内存占用太大也可能导致卡顿,所以应当用多少拿多少。如果不知道用多少可以用vector数组,vector数组是根据数据的大小自动分配而且可以自动分配新的内存,不需要手动填这个数字,会方便很多。注意:使用vector数组需要先#...

c++定义数组时如果不指定数组大小,直接赋初始值,那么占用的内存是多大...
C++可以操作底层数据,所以可以操作超出数组边界的地址,只不过这样的后果是未定义的。临时变量的话是存放在程序进程的堆栈上的,一般来说超过边界的地址还是在堆栈上,所以往往程序还是可以运行的。只是如果这个地址是其他变量的地址,那么修改了其他变量的值,这个地址的值也就被覆盖了。 至于你最后个问题...

关于c++中指针数组赋值时的迷惑
对于此指针数组中的元素 p[0]p[1],p[2]动态分配内存,动态分贝内存就是使该指针有一个合法的地址,指针也就有了一个确切的指向。char p[6]={"Orange","Pear","Banana","Peach","Apple","Guava"} 字符串有其特殊性,字符串末尾以‘\\0’作为结束标志,存储时连续的,所以存储字符串不需要...

C++用memset函数给动态数组赋值,结果出现异常值?
int的大小一般来说都是4个字节的。所以 int * a = new int [m];这里分配的内存是m *4个字节,即 16个字节。memset的函数声明是 void *memset(void *s, int c, size_t n);这里的size_t n是字节数。而sizeof(a)的大小是一个指针的大小,只有4个字节。所以你的memset代码只给 a指向的...

C++为什么cin可以给数组整体赋值?
cin之所以可以是因为,cin 中的>>被重载了,可以识别到a其实是个char[]数组,可以去写。而后面那个则是因为,“fdd”是这个字符串的常量,它返回的是一个指向它的指针,而a是char[]的首地址,是常量(说白了,就是内存的别名),在定义的时候就和某一地址关联好了,不能被改变了,现在却要让它...

C++字符数组赋值问题
你没有给第一位赋值,那么第一位是随机值,你的实例中,a[0]可能是一个负值(-128与-1之间),负值会与第二位结合为一个显示(汉字或一些特殊字符均占两个字符,且第一位是负值),由于此负值与你的'1'(值为49)结合后找不到对应的字符,所以就显示问号 ...

相似回答