设为首页 加入收藏

TOP

C语言指针详解(二)
2019-05-23 14:34:22 】 浏览:143
Tags:语言 指针 详解
r()
18 { 19 int arr[10]; 20 int *p; 21 int i = 0; 22 23 for (i = 0; i < 10; i++) 24 { 25 arr[i] = i; 26 printf("数组[%2d]的地址:%d\r\n", i,&arr[i]); 27 } 28 printf("将指针p指向数组arr的第0个元素\r\n"); 29 //将指针p指向数组arr的第0个元素 30 p = &arr[0]; 31 p = arr;//也可以写成这种形式,因为数组名所代表的就是该数组最开始的一个元素的地址 32 for (i = 0; i < 10; i++) 33 { 34 printf("p[%d]=%d\r\n", i, *(p++)); 35 } 36 37 printf("将指针p指向数组arr的第3个元素\r\n"); 38 //将指针p指向数组arr的第3个元素 39 //打印出来的结果可以看到,最后面3个地址的数值是不确定的 40 p = &arr[3]; 41 for (i = 0; i < 10; i++) 42 printf("p[%d]=%d\r\n", i, *(p++)); 43 44 printf("安全的做法应该是\r\n"); 45 //安全的做法应该是 46 p = &arr[3]; 47 for (i = 0; i < 10-3; i++) 48 printf("p[%d]=%d\r\n", i, *(p++)); 49 50 printf("对数组也可以进行如下方式的使用\r\n"); 51 //对数组也可以进行如下方式的使用 52 //printf("arr[%d]=%d\r\n", i, *(arr++));//数组名不是变量,因此,类似于arr=p和arr++形式的语句是非法的 53 for (i = 0; i < 10; i++) 54 printf("arr[%d]=%d\r\n", i, *(arr + i)); 55 56 int n = 0; 57 char *str = "hello,word"; 58 n = StrLen(str); 59 printf("n=%d\r\n", n); 60 n = StrLen(&str[2]);//当然,这里可以只传入数组的一部分 61 printf("n=%d\r\n", n); 62 }

 

地址算术运算

  通过以下这个例子讲解地址算术运算
  这是一个不完善的存储分配程序。它由两个函数组成。第一个函数alloc(n)返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可利用该指针存储字符序列。第二个函数afree(p)释放已分配的存储空间,以便以后重用。之所以说这两个函数是“不完善的”,是因为对afree函数的调用次序必须与调用alloc函数的次序相反。换句话说,alloc与afree以栈的方式(即后进先出的列表)进行存储空间的管理。标准库中提供了具有类似功能的函数malloc和free,它们没有上述限制。

 1 #define ALLOCSIZE 10000 /* 可用空间大小 */
 2 
 3 static char allocbuf[ALLOCSIZE];/* alloc使用的存储区 */
 4 static char *allocp = allocbuf; /* 下一个空闲位置 */
 5 
 6 char *alloc(int n) /* 返回指向n个字符的指针 */
 7 {
 8     if (allocbuf + ALLOCSIZE - allocp >= n) { /* 有足够的空闲空间 */
 9         allocp += n;
10         return allocp - n; /* 分配前的指针 */
11     }
12     else /* 空间不够 */
13         return 0;
14 }
15 
16 void afree(char *p) /* 释放p指向的存储区 */
17 {
18     if (p >= allocbuf && p < allocbuf + ALLOCSIZE)
19         allocp = p;
20 }
21 
22 /*
23 指针运算
24 2019-05-09
25 */
26 void Pointer_cal()
27 {
28     char *allAddr;
29     printf("空闲地址:%d\r\n", allocp);
30     allAddr = alloc(100);
31     printf("空闲地址:%d\r\n", allocp);
32     afree(allAddr);
33     printf("空闲地址:%d\r\n", allocp);
34 }

未完,待续

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言实现简单的计算器(加、减、.. 下一篇C语言之指针在printf语句里面的使..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目