C语言自学笔记
2015-07-23 13:18
369 查看
C语言自学笔记
限于笔者水平有限,书写记录的不够全面,希望能得到大家的指正,也可以私下交流关于指针的一些认识
gets()的一些认识
scanf()的一些认识
关于指针的一些认识
int n = 2; int *p ; p = &n; //打印出n的地址为了和下面做比对 printf("&n=%d\n",&n); //打印出指针p所存储的值(p所指向的变量的地址) printf("p=%p\n",p); //打印出指针p的地址(和指针所指向的地址不是一个地址) printf("&p=%d\n",&p); //通过指针p读取指针所指向的变量的值 printf("%d\n",*p);
首先我们要明白的是,指针变量也是一个变量,它具备一切其他变量所拥有的特性。
- 系统会在程序执行时,自动为变量分配内存
- 系统分配的内存都是随机的
- 每个变量都可以存储一个值
根据以上变量的特性,所以我们明白几点:
->1.指针变量也是一个变量,它有自己的地址,它的地址是声明指针变量时,操作系统就分配给它的
->2.指针变量是特殊的变量,它也可存储值,但它存的是它所指向的变量的地址
->3.指针变量可以通过取值符号’*’来读取它所指向的变量的值,进而操作它所指向的变量
注:笔者说的只是很浅显的一些关于指针的认识,以后学到新知识再做补充。
gets()和scanf()的一些认识
#include <stdio.h> /* 输入一行字符,分别统计出其中英文字母,空格,数字,和其他字符的个数. 空格 32 a~z 97~122 A~Z 65~90 0-9 48~57 */ int main() { char string[50]; printf("随意输入一行字符\n"); int num_a=0,num_b=0,num_c=0,num_d=0; char c ; // scanf("%s",string); scanf输入的时候有空格后面的字符就不参与赋值/ gets(string); //有个警告:this program uses gets(),which is unsafe for (int i= 0;string[i]!='\0'; i++) { c = string[i]; if (c==' ') { num_b++; }else if ((c>=97&&c<=122)||(c>=65&&c<=90)) { num_a++; }else if (c>='0'&c<='9') { num_c++; }else num_d++; } printf("有 %d 个英文字母\n",num_a); printf("有 %d 个空格\n",num_b); printf("有 %d 个数字\n",num_c); printf("有 %d 个其他字符\n",num_d); return 0; }
笔者在做最基础的C语言的练习的时候遇到了这么一个题,本来也没有什么的并不是特别难。只是在用scanf()函数输入一个字符串的时候,发现当我输入的字符串遇到’ ‘(空格)的时候,后面的字符串是接收不了的。
笔者后来也大致明白了,因为我只定义了一个变量接收字符串,输入空格等于是把字符串分成n+1份了(n是输入的空格数),我应该需要有n+1个字符变量才能接收,而且空格不记录在内。不符合题目的要求
后来笔者上网找了一些资料,用到的方法是gets()函数。gets()可以无上限得输入字符串,但是要确保buffer的空间足够大。
注:笔者用gets()解决了这个问题,但是还是不够理解gets()的机制以及为什么会出现gets()不够安全的警告,以后有了解会持续更新的
相关文章推荐
- 关于指针的一些事情
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C++智能指针实例详解
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- C语言进制转换代码分享
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考