数组和指针是C语言编程中的一个重要部分,两者之间的应用非常灵活,结合以下代码进行进一步理解:
#include
int main()
{
char str[20] = "blog.chinaunix.net";
char *s1=str;
char *s2=str+5;
char c1=str[5];
char c2=*str;
char c3=*(str+5);
char c4=*str+2;
char c5 = (str+1)[5];
int num1 = *str+2;
long num2=(long)str;
long num3=(long)(str+2);
printf(" s1 = %s\n", s1);
printf(" s2 = %s\n", s2);
printf(" c1 = %c\n", c1);
printf(" c2 = %c\n", c2);
printf(" c3 = %c\n", c3);
printf(" c4 = %c\n", c4);
printf(" c5 = %c\n", c5);
printf("num1 = %d\n", num1);
printf("num2 = %ld\n", num2);
printf("num3 = %ld\n", num3);
return 0;
}
运行结果:
结果分析:
str既是数组名称,也是一个指向字符的指针;指针可以参加运算,指针加1相当于数组下标加1,切记字符串编号是从0开始。1) *s1为指向数组str的指针,s1 为字符串str的首地址,即str[0],故第一条输出语句即数组str的内容
2)s2 为从str[5]开始的地址,相当于s1基础上右移5个字符,输出为chinauxix.net3) c1=str[5]即数组str的第6个字符,即c
4)c2为字符型,c2=*str即指数组str的第0号元素,即b
5)因为指针可以参加运算,所以 str+5 表示str[5]的地址,c3 = *(str+5) 表示第6个字符,即c6) c4=*str+2,因为c4输出为字符型号,相当于*str首字符ASCII加2对应的字符,即b+2,也就是d
7)数组元素的访问形式可以看做 address[offset],address 为起始地址,offset 为偏移量。c5 = (str+1)[5],表示以地址 str+1 为起点,向后偏移5个字符,等价于str[6],即str[6]=h
8)字符与整数运算时,先转换为整数(字符对应的ASCII码)。num1 = *str+2,因num1为int类型,*str+2 == b+2 == 98+2 == 100,即num1为100
9)num2和num3分别为字符串str的首地址和第2个元素(2)的地址。
阅读(1173) | 评论(0) | 转发(0) |