#include "stdio.h"
#include <stdlib.h>
int main()
{
//char buf[] = "ab";
char a[] = { 'a','b',0,'c' };//内存存储的为数字0 等价于 \0
char b[] = { 'a','b','0','c' };
char c[] = { 'a','b','\0','c' };
//printf("%s\n",buf);
//puts(buf);//数组元素的首地址
//fputs(buf,stdout);//数组元素的首地址
printf("%s\n", a);//ab
printf("%s\n", b);//ab0c烫烫烫烫ab
printf("%s\n", c);//ab
int l = strlen(a);
//printf("%s\n", a[strlen(a)]);
//system("pause");
//32位系统地址编号0x0000 0000 ~0xffff ffff 故需要四个字节存储,64则需要8个字节才能存完
int num = 0x01020304;//16的8次方 == 2的32次方 所以用八位十六进制的即可表示32的内存
char* p1 = #
short* p2 = #
int* p3 = #
//指针类型 32位编译器 4个字节 64位编译器 8个字节,故指针内容相同
printf("char*:%x\n", p1);
printf("short*:%x\n", p2);
printf("int*:%x\n\n", p3);
//char 1个字节 故只能读取内存的前8位
//short 占两个字节 故能读取内存的前16位
//int 占4个字节 故能读取内存的前32位
//32编译器能支持 32地址总线最大值位4G,64位编译器最大能支持64位地址总线
printf("char*:%x\n",*p1);
printf("short*:%x\n",*p2);
printf("int*:%x\n",*p3);
//int num = 0x01020304;
//char* p1 = (char*)#
//short* p2 = (short*)#
//int* p3 = #
//printf("num:%d\n",num);
//printf("chart*:%x\n", *p1);
//printf("short*:%x\n", *p2);
//printf("int*:%x\n", *p3);
return 0;
}
ab
ab0c烫烫烫烫ab
ab
char*:12ffbd4
short*:12ffbd4
int*:12ffbd4
//这里通过解指针取值内容,对应的内存宽度是由指针变量本身的类型决定的
//比如char* p 1字节 变量与靠近的*整体移除,剩下的类型就是指针变量的类型
//指针的步长(指针+1跨过的字节长度) == sizeof(变量与靠近的*整体移除,剩下的类型就是指针变量的类型) == sizeof(char)
//思考数组的指针+1,数组名 +1
//思考 int **p 的长度
//解:sizeof(p最近的*一起移除 == int *) = sizeof(int *) == 指针类型32位机器为4个字节
char*:4 // 思考:这里为什么取值位04而不是01(因为04是低位,内存存储是从低位到高位存储L--->H)
short*:304 //同理是倒叙
int*:1020304