指针:地址 就是一个数字;
指针变量:保存地址这个数值的容器;
char *p1 = “abc”;
char data[5];申请5个char的基本类型,用data数组名来标记这五个类型的首地址,data的值无法标记5个空间,data的值仅仅是一个标签,不占用空间;
标识 空间属性 地址 值
p1 addr 4B char xxxx ??;
data 常量地址 不占空间;
内存中有一段常量区域,“abc"在内存中不会改变,内存中存了abc0;
双引号默认有一个0结束符;c语言用了匿名存了常量的地址名,用*把地址取出来存入p1;
cha * p1= "abc";用双引号代替abc的首地址,有变量名的话可以用&变量名;
char *p2="abc",常量空间中abc不会单独开辟,只是多开了一个p2,p2存入的是abc的首地址,p1==p2;//p1,p2里存的值一样;
&p1!=&p2;//但p1p2的地址不一样;
char buf[] ="abc";//双引号也表示常量空间中的abc;初始化buf为4个char;对这四个空间逐一赋值;//buf 是一个常量在内存之还是标记了一段空间来存abc0;相当于一个是只读”abc0“一个可变”p1;
这个容器的名称(标识),在哪(地址),存什么(值),干什么(类型);
1、在一行中能作为变量名的标识;
char *fun1(int);
2、以它为中心点,先向右看,再向左看;
3、只要能够明确这个变量标识符对应的属性这个变量名C语言编译器就认识;
映射表
标识 空间属性 地址 值
a1 char 1B 0x12312 97;
a2 数组名,常量地址,数值32/64位怎么操作char 无空间储存 值是在刚定义的时候固定的 ;
p1 指针变量(保存地址容器),容器大小,地址怎么操作 char,char 0x12312 ?p1=char *)&a;
const char *p;//const 只读的,一个char一个char的走,是一个字符串;
printf(const char *format);//当函数指向的空间不变,写上const,表示只读;传双引号要加const;无const会出现断错误;
char *strcpy(char *dest,const *src);//只要是不变的加const;
char *const p3;//只读指针变量,p3存的值不能变化,只能初始化(赋值)一次,p3,地址可以变;只能初始化的时候赋值;//c++引用
const char *p2;//指针变量,保存地址的容器,大小和计算机操作系统位数有关,值是可以变的,指针的地址不可以变;
const char *const p4;//
函数名:一堆代码的首地址;//常量地址数组名和函数名和字符串;
”abcd“,
char *p1;
int a[3];
int *p2;
int b[4][5];
int (*p3)[5];
给二维数组int data[4][5],创建变量来保存数组名;
三维数组int data[4][5][6],创建变量保存数组名;
设计一个计算器,用函数指针;进制转换器;