关于C指针

转载 2015年07月07日 08:45:13

http://blog.chinaunix.net/uid-22889411-id-59688.html

1. 设计一个函数:void find1(char array[], char search, char * pi)


要求:这个函数参数中的数组array是以0值为结束的字符串,要求在字符 串array中查找字符是参数search里的字符。如果找到,函数通过第三个参数(pa)返回值为array字符 串中第一个找到的字符的地址。如果没找到,则为pa为0.

设计:依题意,实现代码如下

void find1(char [] array, char search, char * pa)
{
int i;
for (i=0;*(array+i)!=0;i++)
{
if (*(array+i)==search)
{
pa=array+i
break;
}
else if (*(array+i)==0)
{
pa=0;
break;
}
}
}

你觉得这个函数能实现所要求的功能吗?

调试:

我下面调用这个函数 试试。

void main()
{
char str[]={“afsdfsdfdf\0”};  //待 查找的字符串
char a=’d’;   //设置要查找的字符
char * p=0;  //如果 查找到后指针p将指向字符串中查找到的第一个字符的地址。
find1(str,a,p);  //调用函数以实 现所要操作。
if (0==p )
{
printf (“没找到!\n”);//1.如果没找到则 输出此句
}
else
{
printf(“找到了,p=%d”,p);  //如果找到则 输出此句
}
}

分析:

上面代码,你认为会是输出什么呢?

运 行试试。

唉!怎么输出的是:没有找到!

而不是:找到了,……。

明明a值为‘d’,而str字符串的第四个字符是‘d’,应该找得到呀!

再 看函数定义处:void find1(char [] array, char search, char * pa)

看调用处:find1( str,a,p);

依我在第五篇的分析方法,函数调用时会对每一个参数进行一个隐含的赋值操作 。

整个调用如下:

array=str;
search=a;
pa=p;    //请注意:以 上三句是调用时隐含的动作。
int i;
for (i=0;*(array+i)!=0;i++)
{
if (* (array+i)==search)
{
pa=array+i
break;
}
else if (*(array+i)==0) 
{
pa=0;
break;
}
}

哦!参数pa与参数search的传递并没 有什么不同,都是值传递嘛(小语:地址传递其实就是地址值传递嘛)!所以对形参变量pa值(当然值 是一个地址值)的修改并不会改变实参变量p值,因此p的值并没有改变(即p的指向并没有被改变)。

(如果还有疑问,再看一看《第五篇:函数参数的传递》了。)

修正:

void find2(char [] array, char search, char ** ppa)
{
int i;
for (i=0;*(array+i)!=0;i++)
{
if (*(array+i)==search)
{
*ppa=array+i
break;
}
else if (*(array+i)==0)
{
*ppa=0;
break;
}
}
}

主函数的调用处改如下:

find2(str,a, &p);  //调用函数以实现所要操作。

再分析:

这样调用函数时的整个操作变成如 下:

array=str;
search=a;
ppa=&p;    //请注意:以上三句是调用 时隐含的动作。
int i;
for (i=0;*(array+i)!=0;i++)
{
if (*(array+i) ==search)
{
*ppa=array+i
break;
}
else if (*(array+i)==0)
{
*ppa=0;
break;
}
}

看明白了吗?

ppa指向指针p的地址 。

对*ppa的修改就是对p值的修改。

你自行去调试。

经过修改后的程序就可以完 成所要的功能了。

看懂了这个例子,也就达到了本篇所要求的目的。

函数名与函数指针

你需要知道关于C语言指针的一切

Everything you need to know about pointers in C 你需要知道关于C语言指针的一切 指针的定义 指针是内存地址。 (嗯,简短的段落。...
  • sergeycao
  • sergeycao
  • 2016年12月15日 13:01
  • 3343

[指针八]有关指针的面试题

有关指针的经典面试题           C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一...
  • lngag110
  • lngag110
  • 2014年07月21日 21:33
  • 1645

c语言面试题 指针30个常错题型

来源:http://blog.chinaunix.net/u1/58640/showart.php?id=1354073 记下来以备不时之需。 1. char * const p; char cons...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2013年12月28日 20:54
  • 20406

c语言,通过代码对指针的理解

int a = 5; int *b; b = a;//b的存储空间里放入的是a,不是内存地址,*b意味着b的存储空间的内容(指针)所指向的内存地址的存储空间的内容(卧槽,我都觉得别嘴),所以当b的存储...
  • jbb0403
  • jbb0403
  • 2017年06月08日 15:06
  • 150

C语言指针教程----入门到精通<一>

有一个传说,指针是C语言的精髓;可同时,指针似乎也是C中很难理解的一部分。博主希望在自己复习的同时,写出一些学习心得和体会,供大家讨论。...
  • u014254779
  • u014254779
  • 2014年09月04日 12:39
  • 2484

oj 2736: 指针练习--输出最大值

问题描述:采用指针法,输出10个整型数中的最大值和最小值 作者:何知令 发表时间:2017年3月1日 输入:十个整数 输出最大值和最小值 代码: /* 问题描述:采用指针法,输出10个整型...
  • qq_36203090
  • qq_36203090
  • 2017年03月01日 22:05
  • 233

黑马程序员——C语言基础——指针编程练习题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 今天复习了一下指针的相关知识,并且在网上搜了一道小的编程练习题,大概题意如下: 有n个整数,使...
  • Elors
  • Elors
  • 2015年06月01日 23:07
  • 1729

【转载】C语言中指针使用的注意事项

相信大家对指针的用法已经很熟了,这里也不多说些定义性的东西了,只说一下指针使用中的注意事项吧。 一.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如int * a,b;这种声明是声明了...
  • u011349387
  • u011349387
  • 2015年05月05日 18:03
  • 1102

头文件和指针

如果几个源文件共有一个头文件,需要特别注意的是,不能在头文件中定义数据!最好是在一个源文件中定义,在头文件中声明。 少用全局变量,全局变量很容易在使用中改变。如果函数需要返回指针,则在函数中用mall...
  • fxpbupt
  • fxpbupt
  • 2009年08月19日 14:26
  • 2399

指针存储的内容

看了这段代码测试代码应该就明白了 #include int main() { char a[10]="hello"; char b[10]="world"; ...
  • vv70714527
  • vv70714527
  • 2016年06月30日 22:54
  • 449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C指针
举报原因:
原因补充:

(最多只允许输入30个字)