C语言学习周总结006(指针)
指针(Pointer)可谓是C语言的一大精髓,同样也是C语言学习的一大难点,早在正式开始学习C语言前就听说过这一大名,如今我也开始接触到了它。通过课上的学习以及课下的整理,我对指针有了一些了解。
1.定义
在认识指针前,我们先要认识内存地址这一概念。要知道,我们每定义一个变量,系统就会在内存中为该变量分配一段内存空间,这段空间的长度取决于变量类型(如int型为4个字节),而这段空间在内存中就存在着地址,系统读取一个变量会先找到其首地址,然后再按其类型读取接下来的几个字节,这里的首地址就是该变量的内存地址。而指针(变量)就是存储着某一变量地址的变量,系统可以通过指针(变量)访问其所指向的另一个变量,因此形象地将其称为指针。 指针变量的定义通常如下图所示:
注意指针变量p的类型必须与所指向变量的类型相同。
2.应用
应用指针我们可以定义一个交换两个变量值的函数swap,如下图所示:
其调用时需传入两个待交换变量的地址,如下图所示:
3.例题
编写函数strmcpy
将输入字符串char *t
中从第m
个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
函数接口定义:
void strmcpy( char *t, int m, char *s );
裁判测试程序样例:
#include <stdio.h> #include <string.h> #define MAXN 20 void strmcpy( char *t, int m, char *s ); void ReadString( char s[] ); /* 由裁判实现,略去不表 */ int main() { char t[MAXN], s[MAXN]; int m; scanf("%d\n", &m); ReadString(t); strmcpy( t, m, s ); printf("%s\n", s); return 0; } /* 你的代码将被嵌在这里 */
分析:
复制前先要判断给定第m个字符是否在字符串t的范围内,若超出范围直接将新字符串s赋值为空(NULL),若在范围内则进行下一步的复制。具体步骤见代码注释。
代码:
void strmcpy( char *t, int m, char *s ) { int lens = strlen(t); // 定义字符串t的长度lens if (m <= lens){ // m若在字符串t的长度范围内 int len = 0; // 定义新字符串s的长度len并初始化为0 for (int i = m-1; i < lens; i++){ s[len++] = t[i]; // 将字符串t中第m个字符以后的所有字符依次复制给新字符串s } s[len] = '\0'; // 字符串必须以'\0'结尾才有效 }else{ *s = NULL; // m超出字符串t的长度范围,新字符串s为空(NULL) } }
运行测试:
输入:9(换行)This is Bubble speaking
运行结果:Bubble speaking
输入:10(换行)oversize
运行结果:(空)
程序运行成功!
通过学习指针,我对C语言的了解又更深了一层,希望未来能继续深挖C语言的有关知识!
END:)