数组

来源:互联网 发布:64位dbc2000数据库 编辑:程序博客网 时间:2024/06/05 19:56

#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
/*
int main()
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
cout << str4 << endl;
cout << ( str1 == str2 ) << endl;
cout << ( str3 == str4 ) << endl;
cout << ( str5 == str6 ) << endl;
cout << ( str7 == str8 ) << endl;
return 0;
}

输出0,0,1,1

str1,str2,str3,str4是数组变量,它们有各自的内存空间;
str5,str6,str7,str8是指针,它们指向相同的常量区域。

*/
void main()
{
  int a[5]={1,2,3,4,5};
   int *ptr=(int *)(&a+1);
   cout << "ptr = " << ptr << endl;
   cout << "ptr -1 = " << ptr-1 << endl;
   cout << "&a = " << &a  << endl;//因为a是数组,所以&a跟a都是一样的都是a[0]的地址
   cout << "&a+1 = " << &a+1 << endl;//但是&a+1就不等于a+1,&a+1等价于a+5==a[6]那个值,a+1等价于a[1]
   cout << "a = " << a << endl;//a == &a[0]
   cout << "a + 1 = " << a + 1 << endl;//a+1 == &a[1]
   cout << "&a[0] = " << &a[0] << endl;
   cout << "&a[1] = " << &a[1] << endl;
   printf("%d,%d\n",*(a+1),*(ptr-1));
}

a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

/*
int main()
{
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为\0分配一个空间
char* d = dest;
char* s = &src[len-1];//指向最后一个字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加\0
printf("%s\n",dest);
free(dest);// 使用完,应当释放空间,以免造成内存汇泄露
return 0;
}
*/