C++栈地址增长问题

来源:互联网 发布:单片机电子钟课程设计 编辑:程序博客网 时间:2024/06/01 08:00
#include<stdio.h>#include"stdlib.h"#include<iostream>using namespace std;void func1(int i, char *szTest){cout << "szTest的地址:" << &szTest << endl;cout << "sz本身的值:" << (void*)szTest << endl;cout << "i的地址:" << &i << endl;int k,k2;cout << "k的地址:" << &k << endl;cout << "k2的地址:" << &k2 << endl;cout << "-------------------------------------------------------" << endl;}void func2(int i, char *szTest){cout << "szTest的地址: " << &szTest << endl;cout << "sz本身的值: " << (void*)szTest << endl;cout << "i的地址: " << &i << endl;int k1,k3;cout << "k的地址: " << &k1 << endl;cout << "k2的地址: " << &k3 << endl;}int main(){int a[2];cout <<"&a[0]: "<< &a[0] << endl;cout <<"&a[1]: "<< &a[1] << endl;int i = 0x22;char szTest[4] = {'a','b', 'c', 'd'};cout <<"&i: "<< &i << endl;cout <<"sz本身的值: " << (void*)szTest << endl;cout << *szTest << endl;func1(i, szTest);func2(i, szTest);}

上面例子的输出是:

&a[0]: 00D5FDE0&a[1]: 00D5FDE4&i: 00D5FDD4sz本身的值: 00D5FDC8aszTest的地址:00D5FCF4sz本身的值:00D5FDC8i的地址:00D5FCF0k的地址:00D5FCE0k2的地址:00D5FCD4-------------------------------------------------------szTest的地址: 00D5FCF4sz本身的值: 00D5FDC8i的地址: 00D5FCF0k的地址: 00D5FCE0k2的地址: 00D5FCD4
所以说,栈地址是向下增长的,但是一个数组内的地址是向上增长的。

上面的例子如果改成 char a[2];

取地址要写成(void*) & a[0] 或 (int*) & a[0] 

下面的程序:

char* s = "123456";cout<<"s地址: "<<(void*)s<<endl;cout<<(void*)&s[0]<<endl;cout<<(void*)&s[1]<<endl;cout<<(void*)&s[2]<<endl;cout<<(void*)&s[3]<<endl;cout<<(void*)&s[4]<<endl;cout<<(void*)&s[5]<<endl;int* p = (int*)s;cout<<"p地址: "<<(void*)p<<endl;cout<<p+1<<endl;char* b = (char*)(p+1);cout<<"b地址: "<<(void*)b<<endl;cout<<b<<endl;
输出为:

s地址: 00A6DD4400A6DD4400A6DD4500A6DD4600A6DD4700A6DD4800A6DD49p地址: 00A6DD4400A6DD48b地址: 00A6DD4856请按任意键继续. . .


原创粉丝点击