Chinaunix首页 | 论坛 | 博客
  • 博客访问: 232217
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1487
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-24 10:31
文章分类
文章存档

2014年(20)

2013年(30)

分类: 网络与安全

2014-01-02 17:49:07

指针 一般用法

 (1)pointer_1=&a;指的是pointer_1与a指向的是同一个存储空间,这个空间呢就是存放变量a的空间

(2)定义指针类型是因为指针移动时的需要

(3)pointer_1=&a;pointer_1=&b;这表明指针pointer_1指向的存储空间改变了

(4)变量之间的赋值仅限于当条语句,在后面修改后不会同时改变

eg: a =b;

      b = 5;

    此时a不会等于5

指针用作函数参数(一级指针)

(1)函数中的参数通常有传值与传址一说

(2)交换函数比计较

swap(int *p1,int *p2)
{
int *temp;
temp=(int *)malloc(sizeof(int));
*temp=*p1;
*p1=*p2;
*p2=*temp;
free(temp);
}

上面这个函数在函数体中仅仅是改变了局部变量p1与p2的值

swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}

上面这个函数在函数体中操作的才是p1p2指向的地址

一维指针域一维数组

(1)数组的指针与指针数组

数组的指针就是数组的起始地址,数组元素的指针是数组元素的地址。指针优点是使得目标程序占内存少、运行速度快,从而使得其质量更高。

 

(2)数组与指针变量用法

int a[8];
int *p;

p = a;

数组下标使用a[k];

数组名指针用*(a+k));

指针变量使用*p++;

一维指针二维指针与二维数组

int b[4][4];

int *pp=&b[0][0]; //指针
int **ppp=&pp; //指向指针的指针

for(*ppp;*ppp<(&b[0][0]+16);(*ppp)++)
printf("%d\t",**ppp);

 

for(pp=&b[0][0];pp<(&b[0][0]+16);pp++)
printf("%d\t",*pp);

 

 

字符串

1、用字符数组存放一个字符串
char str[ ]="this is str!!!";
在此 str 是一个数组名,代表字符串数组的首地址。
2、用字符指针指向一个字符串
char *str="this is str,too";

 

拷贝字符串的函数实现

void copy_string(char from[],char to[])
{
int i=0;
while(from[i]!='\0'){
(to[i]=from[i]);
i++;
}

to[i]='\0'; //注意这条语句

return ;
}

void copy_string(char from[],char to[])
{
int i=0;
while((to[i]=from[i++])!='\0'){
;
}

 

void copy_string(char *from,char *to)
{
int i=0;
while(*from!='\0')
*to++=*from++;
*to='\0';

return ;
}

 

 指针数组与数组指针

指针数组指的是一个数组,数组中的每个元素都是指针类型,所有的指针都指向不同的
地址,所指的地址的数据也不一定一样,但是所指的数据类型必须一样。 int *ptr[4];  

数组指针指的是定义的是一个指针,而指针指向的是数组,指针指向数组首单元的地
址,对于数组内部元素的属性不了解,仅仅是规定了数组首单元的地址,通过它可以找到整
个数组。 int (*ptr)[10];  
阅读(1671) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~