变量在内存中的区域
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i1 = 10;
int i2 = 20;
int i3;
const int i4 = 40;
void fn(int i5)
{
int i6 = 60;
static int i7 = 70;
const int i8 = 80;
int* p1 = (int*)malloc(sizeof(int));
int* p2 = (int*)malloc(sizeof(int));
char* str = "good"; //等号两端是不同的数据类型,右端自动转型成char*,而"good"这个char数组仍然没有名字。
//str="abcd";
//strcpy(str,"12345");
//str = (char*)malloc(sizeof(char)*10);
//strcpy(str,"12345");
//char* pt = str;
//free(pt);
//pt = NULL;
//str = "hello,world";
// printf("str=%s\n",str);
char strs[] = "good"; //等号两端是相同的数据类型,右值成为左值
//strs = "hjkl";
//strcpy(strs,"hjkl");
//printf("strs=%s\n",strs);
//............
printf("--------BSS(未初始化的或为0的)区-----------\n");
printf("&i3 = %p\n", &i3);
printf("---------只读区------------\n");
printf("&i4 = %p\n", &i4);
printf("str = %p\n", str);
printf("---------全局变量区------------\n");
printf("&i7 = %p\n", &i7);
printf("&i1 = %p\n", &i1);
printf("&i2 = %p\n", &i2);
printf("---------堆区-----------\n");
printf("&(* p1) = %p\n", p1);
printf("&(* p2) = %p\n", p2);
printf("---------栈区------------\n");
printf("&str = %p\n", &str);//str指向该常量地址
printf("strs = %p\n", strs);//str在栈上申请空间,将常量内容复制进来,所以是局部变量
printf("&i8 = %p\n", &i8);
printf("&i5 = %p\n", &i5);
}
int main(void)
{
int i0=10;
printf("------代码区的符号或数据--------\n");
printf("&main = %p\n", main);
printf("------栈区的符号或数据--------\n");
printf("&i0 = %p\n",&i0);
fn(i0);
return 0;
}
char str[ ]和char str = (char) malloc(n*)
链接:http://blog.youkuaiyun.com/yahohi/article/details/7427724
char * strcpy(char * strDest,const char * strSrc)
{
char * strDestCopy=strDest; //
if ((strDest==NULL)||(strSrc==NULL)) //[1]
throw "Invalid argument(s)"; //[2]
while ((*strDest++=*strSrc++)!='\0'); //
return strDestCopy;
}