* 内存总结 *? ?extern :引用外部符号(外部全局变量或函数) * ? static :静态,其作用1.改变内存区域;2.改变链接属性 * ? 1.局部变量:定义在函数内部的变量 .可以被static (静态)修饰(注意和const) * ? 2.全局变量:定义在函数外部的变量.可以被static (静态)修饰(注意和const) ? 最大的问题"不安全" * ?3.动态内存 *? 4.函数:存放在代码段,可以被static修饰 ? .在C中static主要用来修饰函数 * ? ?内部函数前面必须加static,不让别的文件使用 * const : 使得变量的值不能修改 * ? ? 1.基本类型(char,int,float,double ...)对于const是透明的 * ? ? 2.只能修饰它的"直接右边" * ? ? 3.const主要用于修饰形参是指针且不允许修改的参数
?
#include <stdio.h>
#include "temp.h"//引用自己的头文件
int main()
{
int a = 10;
int b = 20;
int * p = &a;
p = &b;
*p = 100;
const int * p1 = &a;
p1 = &b;//ok
//a = *p1;
//*p1 = 100;//error
int const* p2 = &a;//等价p1
p2 = &b;//ok
//*p2 = 100;//error
int* const p3 = &a;
//p3 = &b;//error
*p3 = 100;//ok
const int* const p4 = &a;
//p4 = &b;//error
//*p4 = 100;//error
//strcpy();
return 0;
}
/*
//const 1.基本类型对于const是透明的
int main()
{
const int ca = 10;//只读
//ca = 100;//error
int b = ca;//ok
int const cb = 10;//和ca完全一样
//cb = 100;//error
return 0;
}
*/
/*
int main()
{
int a = 10; //可读可写
int b = a;//读取a的值 ,使用的是"读"
a = 100;//往a中写入100,使用的是"写"
const int ca = 10;//ca变成只读
//ca = 100;//error
return 0;
}
*/
/*
int main()
{
char str1[] = "hello"; //字符串,字符数组(6个格子)
const char* str2 = "hello";//str2内存为4字节,指针. 字符串常量(不能修改)
str1[0] = 'x';
//str2[0] = 'x';//编译错误
printf("好了\n");
return 0;
}
*/
/*
extern int Min(int, int);
extern int Avg(int, int);
//
int main()
{
printf("%d\n",Max(50,100));
printf("%d\n", Min(50, 100));
printf("%d\n", Avg(50, 100));
return 0;
}
*/
/*
void Fun()
{
int a = 0;
a++;
printf("%d\n",a);
}
void Fun1()
{
static int a = 0;//只创建一次,只执行一次
//a = 0;
a++;
printf("%d\n",a);
}
int main()
{
for (int i = 0; i < 10; i++)
//Fun();
Fun1();
return 0;
}
*/
/*
int g_a = 10;//普通全局变量
extern int g_x;//别的文件有,编译器自动找(链接)
extern int g_y;
int g_b;
void Fun()
{
printf("%d\n",g_a);
g_x = 0;
}
int main()
{
int a = 10;//普通局部变量
static int b = 20;//静态局部变量
b++;
printf("%d\n",Max(10,20));
printf("%d\n",g_x);
//printf("%d\n", g_y);//error
printf("%d\n",g_b);
return 0;
}
*/
|