1)数组 字符串 指针(地址)
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int a[]={0,1,2};
printf("数组名字是数组的第一个元素四个字节地址的首地址");
printf(" 数组名字也是数组的首字节地址\n");
printf("%x\n",a); //第一个元素的首字节地址
//每个整型元素占4个字节
printf("%x\n",a+1);//第二个整形元素的首字节地址
int A=a+1;// a是数组首地址 数组地址以字节为单位
//a+1 代表a对应的数值加上一个sizeof(int)
printf("%x\n",A);
A++;
printf("%x\n",A);//这里A不是数组首地址是整数
//单纯整数数值加1
printf("%x\n",a+2);//第三个整型元素的首字节地址
printf("%d",*a) ;//取a地址对应int整形空间的存储的数值
//printf("%d",*A);
int *p=a;
p++;
printf("%x %x\n",a,p); //p是地址 地址加1
printf("%d\n",*p);//可以取出p地址 存放的值
//是不是地址加1 都是加4个字节呢?
short int *q=malloc(8*sizeof(short int));
printf("%x\n",q);
q++;
printf("%x\n",q);//答案是否定的 地址加1和地址类型有关
//short int类型的地址加1 加两个字节
double *q1=malloc(8*sizeof(double));
printf("%x\n",q1);
q1++;
printf("%x\n",q1);//double 类型地址加1 加8个字节
printf("字符数组的首地址 以及地址思考=============\n");
char str[]="abcd";
printf("%x\n",str);
printf("%x\n",str+1);//char类型地址加1
printf("字符%c\n",str[0]);//str[0]输出地址内存的字符
printf("ASCII值%d\n",str[0]);
// str[0]输出地址内存储的字符对应的ASCII码值
printf("指针数组相关的思考======================\n");
char *p1[4]={"a","b","c","d"};
printf("%x\n",p1[0]);//数组的第一个元素 地址
printf("%x\n",p1[1]);//字符串以\0结尾 占一个字节
printf("%s %s\n",p1[0],p1[1]);//地址内存储的字符串
char pp[4]={'a','b','c','d'};
printf("%x\n",&pp[0]);
printf("%x\n",&pp[1]);
//字符没有结尾标志一个字符占一个字节
// 只有一个字符的字符串因存在\0占两个字节
printf("%c %c\n",pp[0],pp[1]);
system("PAUSE");
}
2)printf("%s",str)思考
https://blog.csdn.net/tcjy1000/article/details/46709061?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
#include <stdio.h>
#include <stdlib.h>
void main(void)
{ printf("字符串类型指针数组=======\n");
char *str[2]={"aa","bb"};
printf("%x\n",str);
printf("%x\n",str+1);
printf("%c\n",*str[0]);//取60ff20字节地址内的数据
printf("%s\n",str[0]);//str[0]=60ff20
//从60ff20开始依次输出各字节地址存储的字符遇到\0结束
/*char *p1[4]={"aa","bb","c","d"};
printf("%x\n",p1[0]);//数组的第一个元素 地址
printf("%x\n",p1[1]);//字符串以\0结尾 占一个字节
printf("%c %c\n",*p1[0],*p1[1]);//地址内存储的字符串*/
printf("整形类型指针数组=======\n");
int *mun[2]={0,1};
printf("%x\n",mun);
printf("%x\n",mun+1);
printf("%d\n",*mun);
printf("%d\n",mun[1]);
printf("%d\n",*(mun+1));
//mun是首地址 mun[1]等同于*(mun+1)
system("PAUSE");
}