Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505548
  • 博文数量: 111
  • 博客积分: 3160
  • 博客等级: 中校
  • 技术积分: 1982
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:49
个人简介

低调、勤奋。

文章分类

全部博文(111)

文章存档

2014年(2)

2013年(26)

2012年(38)

2011年(18)

2010年(27)

分类: C/C++

2011-02-10 16:43:45


指针的定义:指针其实就是一个变量,只不过存放的值为其他变量的地址,它自己也有地址。

指针的指针:也是一个变量,只不过它存放的值为另一个指针变量的地址,该指针又存放另一个变量的地址,挺复杂。

那在什么时候需要使用到指针的指针呢,往往在函数需要返回该指针的值时。

函数参数的传递简单分值传递和地址传递,值传递不会改变原来变量的值,只有地址传递会,例如:

//在字符串中,查找某个字符,并返回该字符所在字符串的首地址

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;
}
}
}
main()
{
char str[] = {"afsdfsdfdf\0"}; /* 待查找的字符串 */
char a = 'd';
char *p; /* 如果查找到后指针p将指向字符串中查找到的第1个字符的地址。 */
find2(str, a,p);
if (0 == p)
{
printf("没找到!\n"); /* 如果没找到则输出此句 */
}
else
{
printf("找到了,p = %s", p); /* 如果找到则输出此句 */
}

结果是找不到,为何,因为这里的传入为参数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;
}
}
}
main()
{
char str[] = {"afsdfsdfdf\0"}; /* 待查找的字符串 */
char a = 'd';
char *p = 0;
find2(str, a,&p); //传p的地址进去方可。
if (0 == p)
{
printf("没找到!\n"); 
}
else
{
printf("找到了,p = %s", p);
}
return(0);
}

一个简单的例子进行描述三者的关系:
main(){

  int a;
  int *pa;
  int **ppa;
  a = 10;
  pa = &a;
  ppa = &pa;
  printf(" a address is %d pa is %d ppa is %d\n",&a,pa,*ppa);


}
结果为:
 a address is -1076209588 pa is -1076209588 ppa is -1076209588

int a ;
int *pa ;
int **ppa;

三者的关系为:

a = *pa = **ppa
&a = pa = *ppa
&pa = ppa

即pa的值为a的地址,*ppa的值为pa的值,**ppa的值为a的值。

 int b;
 int c;
 int *pb;
 int **pbb;
 c =50;
 b = 30;
 pb = &b;
 pbb = &pb;
 *pbb = &c; //这里将*pbb的值改为c的地址,则此时,pb指向的地址变成了c的地址。

 printf("b = %d and pb = %d and pbb = %d c add = %p b add = %p and pa = %p and *pbb=%p\n",b,*pb,**pbb,&c,&b,pb,*pbb);



文件:彻底搞定C指针.pdf
大小:328KB
下载:下载


附件为彻底搞定c指针,写得不错,大大受益。


阅读(1162) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-06 13:31:19

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com