Chinaunix首页 | 论坛 | 博客
  • 博客访问: 806968
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 726
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-19 15:04
个人简介

重新开始,做回自我,爱拼的男人最牛!

文章分类
文章存档

2021年(2)

2020年(3)

2019年(17)

2014年(1)

2011年(1)

2010年(63)

我的朋友

分类: C/C++

2019-12-18 22:54:34

数组和指针是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.net


3) c1=str[5]即数组str的第6个字符,即c

4)c2为字符型,c2=*str即指数组str的第0号元素,即b

5)因为指针可以参加运算,所以 str+5 表示str[5]的地址,c3 = *(str+5) 表示第6个字符,即c


6) 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) |
给主人留下些什么吧!~~