#include <stdio.h>
#include <string.h>
int main()
{
char (*ptr)[4]=NULL;//声明了一个数组指针,指向的数组含有4个元素
char *p;
char s[4]="abc";
p=s;
ptr=&s;
char t[4]="tui";
//t[4]="tui";
printf("首元素的地址&s[0]=%#x\n",&s[0]); //首元素的地址&s[0]=0x62fe00
printf("首元素的地址s=%#x\n",s); //首元素的地址s=0x62fe00
printf("首元素的地址p=%#x\n",p);//首元素的地址p=0x62fe00
printf("首元素的地址+1 p+1=%#x\n",p+1);//首元素的地址+1 p+1=0x62fe01
printf("数组的地址ptr=%#x\n",ptr);//数组的地址ptr=0x62fe00
printf("数组的地址+1 ptr+1=%#x\n",ptr+1);//数组的地址+1 ptr+1=0x62fe04
printf("\n");
printf("p:%s\n",p);p:abc
printf("s:%s\n",s); s:abc
printf("ptr:%s\n",ptr);ptr:abc
printf("(*ptr):%s\n",*ptr);(*ptr):abc
//输出b
printf("\n");
printf("%c\n",(*ptr)[1]);//这里的(*ptr)表示的是数组名,数组名存放的是数组首元素的地 址,
//(*ptr)[1]表示第二个元素 b
printf("(*ptr)=%#x\n",(*ptr)); //这里的(*ptr)表示的是数组名,(*ptr)[1]表示第二个元素
//(*ptr)=0x62fe00
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char (*ptr)[4]=NULL;//声明了一个数组指针,指向的数组含有4个元素
char *p;
char s[][4]={"abc","frt","hhji"};
ptr=s;
printf("第一个%s\n",s[0]);
printf("第2个%s\n",s[1]);
printf("第3个%s\n",s[2]);
printf("ptr:%s\n",ptr);
printf("ptr:%s\n",ptr+1);
printf("ptr:%s\n",s);
printf("s=%#x\n",s);
printf("ptr=%#x\n",ptr);
printf("s[0]=%#x\n",s[0]);
printf("&s[0][0]=%#x\n",&s[0][0]);
printf("数组的地址ptr=%#x\n",ptr);//数组的地址ptr=0x62fe00 ???
printf("数组的地址+1 ??ptr+1=%#x\n",ptr+1);//数组的地址+1 ??ptr+1=0x62fe04
printf("s[1]=%#x\n",s[1]);
return 0;
}
程序说明:
1、char t[4]="tui";使用数组定义字符串时,要在声明字符串的时候就直接定义字符串;
//t[4]="tui";这种定义字符串的方法是错误的。
2、数组指针是指针,指向的是整个数组。数组指针p加1,那么其p的值直接加上整个数组的长度。
3、数组首元素的地址与数组的地址是不同的概念,但是二者的值是相同的。
4、不同变量形式的地址可能是相同的,但意义不同,使用时注意区分。