第6章 指针

1.在一组字符串中查找字符:

#include<stdio.h>

#include<assert.h>

#include<stdlib.h>

#define TRUE 1

#define FALSE 0

int find_char(char **strings , int value)

{

//  assert(strings != NULL);

while(*strings !=NULL){

while(**strings!='\0'){

if(*(*strings)++ == value )

{

puts("i can be here!\n");

return TRUE;

}

}

strings++;

}

return FALSE;

}

int main()

{

char abc[5][5]={"abcd","efgh","ijkl","mnop"};

char **p;

p=(char **)malloc(sizeof(char**));   //需要注意1

*p=&abc[0][0];

char value;

puts("Please input your char:");

scanf("%c",&value);

int num=find_char(p,value);     // 需要注意

printf("number is %d\n",num);

return 0;

}

(1)声明了指针之后要对其进行初始化,因为指针变量不会自动分配任何内存。否则会出现错误:Segmentation fault (core dumped)

(2)二数组名代表了数组的起始地址,如 char arr[5][6]; 那么数组名 arr就是这个二维数组的首地址。这样的写法:char arr[5][6], *p; p=arr;是错误的,二维数组名是一个二级指针,是地址的地址  ,char arr[5][6]; char **p; p=arr;这样写同样是错误的。

直接将abc传给find_char是错误的,即:find_char(abc,value)。这样会出现错误:passing argument 1 of ‘find_char’ from incompatible pointer type

2.字符串反向打印

#include<stdio.h>

#include<stdlib.h>

void reverse_string(char *string)

{

char *p;

p=(char *)malloc(sizeof(char *));

p=string;

while(*p!='\0'){    //只能用*p!='\0’作为判断条件,不能用p!=NULL,此时p指向了’\0’

p++;

}

printf("The reverse string is : ");

while(p>=string){  //这里的条件很重要

putchar(*p);

p--;

}

printf("\n");

}

int main()

{

char abc[20];

puts("Please input your string:");

scanf("%s",abc);

printf("the string is : %s\n",abc);

reverse_string(abc);

return 0;

}

第7章 函数

  1. 规则:所有参数都是传值调用。数组例外,因为数组参数的值是一个指针,下标引用实际上是对这个指针执行间接访问操作。

eg:整数交换

void  swap(int x, int y)

{

int  temp;

temp = x;

x = y;

y = temp;

}

无效,因为实际交换的是参数的拷贝,原先的参数值并未进行交换。

void  swap(int *x, int *y)   //有效

{

int  temp;

temp = *x;

*x = *y;

*y = temp;

}

2.‘0’+0=’0’;  ‘0’+1=’1’;  ‘0’+2=’2’;  .......

3.阅读递归函数最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。递归函数的变量空间创建于运行时堆栈上。

C和指针之学习笔记(2)的更多相关文章

  1. 02.C语言关于指针的学习笔记

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内 ...

  2. 《征服c指针》学习笔记-----统计文本单词数目的程序word_count

    1.程序的要求:对用户指定的英文文本文件(包括标准输入),将英文单词按照字母顺序输出到用户指定的文本文件中(包括标准输出),并且在各单词后面显示单词的出现次数. 2.模块设计: 主要分为:1.从输入流 ...

  3. &lt;深入理解C指针&gt;学习笔记和总结 第四章 指针和数组

    数组是一个什么玩意: 数组和指针我的理解,有同样之处也有不同之处.因有同样之处,因此一些资料上说,数组和指针本质是同样的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 同样之处: 数组名 ...

  4. C和指针之学习笔记(6)

    第17章 经典数据结构类型 堆栈 堆栈接口提供三种基本的操作:push.pop 和 top. Push:把一个新值压入到堆栈的顶部. Pop: 只把顶部元素从堆栈中移除,它并不返回这个值. Top: ...

  5. C和指针之学习笔记(5)

    第10章 使用结构和指针 单链表 typedef struct NODE { struct NODE *link; int value; } Node; 插入到一个有序单链表: #include< ...

  6. C和指针之学习笔记(4)

    第9章 字符串 字符串的输入与输出 int  ch;  char strings[80];  FILE *input; (1)scanf(“%c”,&ch);   printf(“%c \n” ...

  7. C和指针之学习笔记(3)

    第8章 数组 1.数组与指针 数组名是一个个元素的地址. int  a[10];  int  b[10];  int  *c; (1) c = & a[0]; &a[0]表示一个指向数 ...

  8. C和指针之学习笔记(1)

    第1章 1.输入字符串 while((ch=getchar())!=EOF  &&  ch!=’\n’) ; ch=getchar() while(ch!=EOF  && ...

  9. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

随机推荐

  1. C语言与汇编语言对照分析

    游戏通常会包含各种各样的功能,如战斗系统.UI渲染.经济系统.生产系统等,每个系统又包含各式各样子功能,如伤害判定.施法.使用道具.角色移动.玩家之间交易等等.这些游戏功能在代码实现中往往少不了条件判 ...

  2. 配置node,sass,淘宝镜像环境

    由于最近由于刚到手一台新的thinkpad(哈哈,宝宝是个小穷B,木有小苹果),所以工作开发中所用到的环境就需要重新安装一下啦,这里的话,我就把我目前所用到的进行总结一下,其余的会在以后的开发过程中, ...

  3. bugku数字验证绕过正则

    题目:http://120.24.86.145:9009/21.php 第6行使用正则匹配如果匹配到$password开头12个字符中有空格则输出flag并执行exit; 12行是正则匹配$passw ...

  4. linux kernel make构建分析

    前言 之前对uboot的构建进行了分析,现在再对linux kernel的构建进行分析.几年前的确也分析过,但是只是停留在笔记层面,没有转为文章,这次下定决定来完善它. 环境 同样,采用的还是zynq ...

  5. 【BubbleCup X】F:Product transformation

    按照题解的规律,首先能看出前面每个数幂次的性质. 然后发掘约数的性质 #include<bits/stdc++.h> ; typedef long long ll; using names ...

  6. No manual entry for pthread_mutex_init .

    $manpthread_mutex_init No manual entryfor pthread_mutex_init 解决方案: $sudo apt-get install manpages-po ...

  7. HBase原理解析(转)

    本文属于转载,原文链接:http://www.aboutyun.com/thread-7199-1-1.html   前提是大家至少了解HBase的基本需求和组件. 从大家最熟悉的客户端发起请求开始讲 ...

  8. Builder设计模式--改善构造器多个参数时可显著改善可读性

    作为一名程序开发者,设计模式其实一直有在接触,只是没有专门的去学过,所以可能对设计模式没有一个系统的理解.在一次项目中,需要使用到第三方服务商提供的功能,为了尽快的熟悉其功能代码,在官网下了demo来 ...

  9. mac os版本Intellij IDEA 搭建spring mvc的maven工程(新手教学)

    由于近期换了新公司,又换mac pro作为新电脑,打算把用了很多年的eclipse换成IDEA(IDEA比eclipse的好处我就不多说了),由于mac os和IDEA刚开始用不久,所以专门用一篇博客 ...

  10. CVE-2012-0158个人分析

    CVE-2012-0158是一个比较有名的老漏洞了,这次从论坛上找到一个poc文件,利用这个poc来分析CVE-2012-0158漏洞的形成. http://bbs.pediy.com/showthr ...