第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. Shiro实战教程(一)

    Shiro完整架构图 Shiro认证过程 Shiro授权的内部处理机制 Shiro 支持三种方式的授权 1.编程式:通过写if/else 授权代码块完成: Subject subject = Secu ...

  2. 20155335俞昆《Java程序设计》第五周总结

    #  20155335    <Java程序设计>第五周学习总结 ##  教材学习内容总结 ##  教材学习中的问题和解决过程 对于异常处理,程序中总有意想不到的状况所引发的的错误,Jav ...

  3. Name That Number 命名那个数字

    1.2.3 Name That Number 命名那个数字 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 183  Solved: 33[Submit][ ...

  4. 用jquery实现小火箭到页面顶部的效果

    恩,不知道之前在哪看过一个页面效果就是如果页面被滑动了就出现一个小火箭,点击这个小火箭就可以慢慢回到页面顶部,闲的没事,自己搞了一下 需要引入jquery 代码和布局都很简单 <!DOCTYPE ...

  5. pythonif语句和循环语句

    1.if语句用法 # if语句用法(缩进相同的成为一个代码块) score=90 if score>=60: print("合格") print("OK" ...

  6. nginx配置不当导致的目录遍历下载漏洞-“百度杯”CTF比赛 2017 二月场

    题目:http://98fe42cede6c4f1c9ec3f55c0f542d06b680d580b5bf41d4.game.ichunqiu.com/login.php 题目内容: 网站要上线了, ...

  7. MySQL创建相同表和数据命令

    创建和表departments结构和数据一样的表departments_t mysql> create table departments_t like departments; Query O ...

  8. 15个你不得不知道的Chrome dev tools的小技巧

    转载自:https://www.imooc.com/article/2559 谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chro ...

  9. 全面了解 Nginx 主要应用场景

    前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流 N ...

  10. 大数据系列之kafka-java实现

    Java源码GitBub地址: https://github.com/fzmeng/kafka-demo 关于kafka安装步骤可见文章   http://www.cnblogs.com/cnmeng ...