来博客园今天刚好两年了,两年前开始学编程。

忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多。这两天调试服务器,遇到不少麻烦。

刚出去溜达了一下,晚上天凉了,现在手感觉凉的有点不灵活了都。大伙多注意身体!

继续我的C。发现个问题,自己的文章排版很丑,以后也要多注意。

printf("hello world");

printf接受的是一个指向字符数组第一个字符的指针。也就是说,字符串常量可通过一个指向其第一个元素的指针访问。

char *p;

p = "hello world";   //将一个指向字符串数组的指针赋值给p。该过程没有进行字符串的复制,只是涉及到指针的操作。C语言没有提供将整个字符串作为一个整体进行处理的运算符。

char s[] = "hello world";  //定义一个字符数组

char *p = "hello world";  //定义一个指针

两种声明的区别:

s是一个仅足以存放初始化字符串及空字符'\0'的一维数组,数组中的单个字符可以修改。

p始终指向同一个存储位置,其初始值指向一个字符串常量,之后它可以被修改以指向其他地址,如果试图修改字符串的内容,结果是没有定义的。

//复制字符串

 #include <stdio.h>
void strcpy1(char *s, char *t); main(){
char t[] = "hello world";
char s[] = "";
strcpy1(s,t);
printf("%s\n",s); //hello world
}
/******将指针t指向的字符串复制到指针s指向的位置,使用数组下标实现***/
void strcpy1(char *s, char *t){
int i = ;
while((s[i] = t[i]) != '\0'){
i++;
}
}
 #include <stdio.h>
void strcpy2(char *s, char *t); main(){
char t[] = "hello world";
char s[] = "";
strcpy2(s,t);
printf("%s\n",s); //hello world
}
/******将指针t指向的字符串复制到指针s指向的位置,使用指针实现***/
void strcpy2(char *s, char *t){
while((*s = *t) != '\0'){
s++;
t++;
}
/**
//简写
while((*s++=*t++) != '\0')
;
**/
/**
//再简写
while(*s++=*t++)
;
**/
}

刚遇到这个警告:conflicting types for built-in function 'strcpy'

  函数命名冲突了

//比较两字符串

 #include <stdio.h>
int strcmp(char *s, char *t); main(){
char t[] = "hello world";
char s[] = "helloabc";
printf("%d\n",strcmp(s,t)); //
}
/****比较两字符串顺序***/
int strcmp(char *s, char *t){
int i;
for(i=; s[i]==t[i]; i++){
if(s[i] == '\0'){
return ;
}
}
return s[i] - t[i];
}
#include <stdio.h>
int strcmp(char *s, char *t); main(){
char t[] = "hello world";
char s[] = "helloabc";
printf("%d\n",strcmp(s,t)); //65
}
/****比较两字符串顺序***/
int strcmp(char *s, char *t){
for(; *s==*t; s++,t++) {
if(*s == '\0'){
return 0;
}
}
return *s - *t;
}

一个函数实现或一种算法的实现,还是需要用数据去模拟,然后找出规律。就上例,作简单分析:

s1 "hello world";

s2 "helloabc";

for循环,i=0,s[0]=t[0],依此类推,s[4]=t[4],当i=5时,s[5]是一个空格,t[5]=a,s[5]!=t[5],跳出for循环,返回a字符与空格字符的差,97-32=65。假如t[5]也是一个空格的话,继续下一个比较,如果s[6]==‘\0’的话,说明s[5]还是等于t[5],返回0。

以后尽量都要去多分析原理,加深记忆。

指针数组及指向指针的指针

  指针本身也是变量,所以它也可以其他变量一样存储在数组中。

二维数组

今天是2013年的第300天,今年只剩65天,大家多多珍惜吧!很巧的是,之前的测试中字符a-空格刚好也是65。

 #include <stdio.h>
int day_of_year(int year, int month, int day);
void month_day(int year, int yearday, int *pmonth, int *pday); static char daytab[][] = {
{,,,,,,,,,,,,},
{,,,,,,,,,,,,}
};
main(){
printf("%d\n", day_of_year(, , )); //300
int pmonth = ;
int pday = ;
int year = ;
int yearday = ;
month_day(year, yearday, &pmonth, &pday);
printf("%d年第%d天是%d月%d日\n",year, yearday,pmonth,pday); //2013年第300天是10月27日
return ;
} int day_of_year(int year, int month, int day){
int i, leap;
leap = (year% == && year% != ) || (year % == );
for(i=; i<month; i++){
day += daytab[leap][i];
}
return day;
} void month_day(int year, int yearday, int *pmonth, int *pday){
int i, leap;
leap = (year% == && year% != ) || (year % == );
for(i=; yearday>daytab[leap][i]; i++){
yearday -= daytab[leap][i];
}
*pmonth = i;
*pday = yearday;
}

附:

一个人晚上出去打了10斤酒,回家的路上碰到了一个朋友,恰巧这个朋友也是去打酒的。不过,酒家已经没有多余的酒了,且此时天色已晚,别的酒家也都已经打烊了,朋友看起来十分着急。于是,这个人便决定将自己的酒分给他一半,可是朋友手中只有一个7斤和3斤的酒桶,两人又都没有带称,如何才能将酒平均分开呢?

一天,小赵的店里来了一位顾客,挑了20元的货,顾客拿出50元,小赵没零钱找不开,就到隔壁小韩的店里把这50元换成零钱,回来给顾客找了30元零钱。过一会,小韩来找小赵,说刚才的是假钱,小赵马上给小李换了张真钱。问:在这一过程中小赵赔了多少钱?

原文作者:lltong,博客园地址:http://www.cnblogs.com/lltong/

重拾C,一天一点点_10的更多相关文章

  1. 重拾C

    重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...

  2. 重拾C,一天一点点_2

    类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...

  3. 重拾C,一天一点点

    数据类型及长度 char        字符型,占用一个字节 int          整型,通常代表特定机器中整数的自然长度 short       16位 int         16位或32位 ...

  4. CSS魔法堂:重拾Border之——更广阔的遐想

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  5. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. CSS魔法堂:重拾Border之——图片作边框

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  7. CSS魔法堂:重拾Border之——解构Border

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  8. 重拾Blog

    上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...

  9. [linux]重拾linux

    起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...

随机推荐

  1. 打印print

    <script type="text/javascript"> function printpreview() { try { var HKEY_Root, HKEY_ ...

  2. 手机app测试之我见

    app端功能测试不是单纯的点点点,在实际的工作中,测试小白需要从业务入手,熟悉基本测试点.测试技巧和方法,以点带面,从功能和思维入手,避免眼高手低: app端测试,首先我们需要考虑不同的机型系统.不同 ...

  3. SICP 换零钱的迭代版本

    看到换零钱方式统计这里, 书中给出了递归的实现但没有给出迭代版本说要留给读者作为挑战, 既然说是作为挑战那肯定是能解决的,在想了一天无果之后最终在别人博客的帮助下终于实现了迭代的版本...也算是经历坎 ...

  4. php中若干模块的安装

    1.php的mysql扩展pdo_mysql(在php源码所在目录) 1.1 进入 PHP 的软件包 pdo 扩展目录中   cd /usr/local/services/php-5.6.5/ext/ ...

  5. Java中几种常见的排序方式

    冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字 ...

  6. hadoop2.5.1搭建(二)

    第一篇主要是整体的步骤,其实中间遇到很多问题,第二篇将遇到的问题全部列举下来: 1.1包不能加载警告 WARN util.NativeCodeLoader: Unable to load native ...

  7. 洛谷P1472 奶牛家谱 Cow Pedigrees

    P1472 奶牛家谱 Cow Pedigrees 102通过 193提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 农民约翰准备 ...

  8. 洛谷P1113 杂物

    P1113 杂务 251通过 441提交 题目提供者该用户不存在 标签图论递推 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 为什么会只有10分? 题目描述 John的农场在给奶牛挤奶前有很 ...

  9. TCP/IP详解学习笔记(7)-- 初识运输层

    作为TCP和UDP协议的学习前奏,简单的介绍一下运输层的相关内容,方便对TCP,UDP的学习. 1.概述      运输层的任务主要是负责主机中两个进程之间的通信.      运输层的基本功能: 复用 ...

  10. 两个正在运行的activity之间的通信

    在android应用程序开发的时候,从一个activity启动另一个activity并传递一些数据到新的activity非常的简单,但是当您需要让后台运行的activity回到前台并传递一些数据可能就 ...