目前主要分为三个专栏,后续还会添加:
专栏如下: C语言刷题解析 C语言系列文章 我的成长经历
感谢阅读!
初来乍到,如有错误请指出,感谢!
描述
键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。
输入描述:
键盘输入一个字符串
输出描述:
输出字符串的长度
思路 :
创建一个数组用来存放打印的字符
进行函数的调用
将数组的首字符地址传入进指针里
接着由while循环来判断是否读取到 \0
因为 \0 是数组结束的标志
然后使用计数器
来计数
代码 1 :
#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>void get_line(char* p) // 将arr的首字符的地址传进了函数
{int count = 0; //用来计数 判断有多少个字符while (*p++ != '\0') //用来判断 当 *p 不为\0 的时候 //就进入while循环来判断 有多少个字符//当*p为\0的时候 就不进入了 说明 字符已经寻找完了{count++;}printf("%d", count);
}int main(){char arr[100] = {0};//字符数组 初始化scanf("%[^\n]", arr);//%[^\n]的意思是在遇到回车之前不断输入get_line(arr);//将数组传递给 get_line 函数里面去return 0;
}
代码 2:
#include<stdio.h>
int main()
{ char *a;//先定义个字符指针char a1[100]={0};scanf("%[^\n]",a1);//%[^\n]的意思是在遇到回车之前不断输入a=a1;//将已输入的数组的地址交给字符指针int cnt=0;while(*a!='\0'){//当*a不等于0时即数组还没有到最后一项时让计数器记录起来cnt++;a++;//让指针指向字符数组的下一项}printf("%d",cnt);return 0;
}
代码 3:
#include <stdio.h>
#include <string.h>int my_strlen(char *arr, int sz) {
// char *p = arr;int cnt = 0;int count = 0;while (*arr != '\0') {arr++;cnt++;}
// for (int i = 0; i < sz; i++) {
// if (arr[i] == ' ') {
// count++;
// }
// }return cnt;
}int main(void) {char arr[20] = {0};scanf("%[^\n]",arr);int sz = sizeof(arr) / sizeof(arr[0]);int ret = my_strlen(arr, sz);printf("%d", ret);return 0;
}
代码 4 :
#include <stdio.h>int main() {char str[100]; // 假设输入的字符串不会超过99个字符char *ptr = str; // 初始化字符指针指向字符串的开始位置int length = 0; // 初始化长度计数器// 从键盘读取字符串scanf("%99s", str); // 限制输入长度,防止缓冲区溢出// 使用字符指针遍历字符串并计算长度while (*ptr != '\0') {length++; // 每次循环,增加长度计数器ptr++; // 移动指针到下一个字符}// 输出字符串的长度printf("%d\n", length);return 0;
}
知识点:
-
指针定义:指针是一个变量,其存储的是另一个变量的内存地址。
-
指针变量声明:使用
type *var_name;
的形式声明一个指针变量,其中type
是指针指向的数据类型。 -
指针初始化:指针变量应该被初始化为一个有效的地址或者
NULL
。 -
地址操作符
&
:用于取得变量的内存地址。 -
解引用操作符
*
:用于访问指针指向的内存地址中存储的值。 -
指针的算术:可以对指针进行加法和减法操作,指针的值会按照所指向数据类型的字节大小进行增减。
-
指针与数组:数组名在大多数表达式中会被解释为指向数组首元素的指针。
-
指针数组:一个数组,其元素都是指向相同或兼容类型的指针。
-
函数指针:指针可以指向函数,这样就可以通过指针调用函数。
-
动态内存分配:使用
malloc
、calloc
、realloc
和free
等函数在堆上动态分配和管理内存。 -
指针与字符串:在C语言中,字符串字面量存储在只读内存中,字符串的末尾以空字符
\0
结束。字符串可以通过字符数组和字符指针来处理。 -
指针类型转换:可以使用类型转换操作符
(type *)
将一个指针转换为另一种类型的指针。 -
空指针
NULL
:一个指针可以被赋予NULL
值,表示它不指向任何地址。 -
指针的指针:可以定义一个指向指针的指针,这在处理多维数组或动态数据结构时非常有用。
-
指针与结构体:指针可以用来访问和操作结构体中的成员。
-
指针的比较:可以比较两个指针是否相等或不等,或者它们所指向的地址的大小。
-
指针数组和多维数组:指针数组可以用来模拟多维数组,每个指针指向一个一维数组。
-
指针安全:指针操作需要小心,不当的指针使用可能导致程序崩溃或安全漏洞。
-
指针与引用传递:在函数中,通过指针传递参数可以避免复制大的数据结构,提高效率。
-
指针常量与常量指针:指针常量是一个指针,其值不能改变;常量指针是一个指向常量的指针,它指向的值不能改变。
知识点先列举这么多,指针知识点比较复杂
待我写博客来慢慢详细叙述。