您的位置:首页 > 编程语言 > C语言/C++

c语言指针集合

2016-03-20 18:21 323 查看


指针与一维数组


一维数组访问数组元素的4种方法:

1.下标法,用a[i]来访问数组元素;

2.指针法,(ptr+i)形式间接访问;

3.数组名,用(a+i)形式访问数组;

4.指针下标法,ptr[i]形式访问数组元素;

二维数组访问数组元素

1.int *ptr;ptr=a[0];

for(i=0;i<3;i++)

for(j=0j<4;j++)

scanf("%d",ptr++);

ptr=a[0];

for(j=0j<4;j++)

scanf("%d",ptr++);

printf("%d",*ptr++);


指向二维数组指针变量的说明形式

类型说明符(*指针变量名)[长度];

int a[3][4]={{2.4.6.8},{10,12,14,16},18,20,22,24};

int (ptr)[4];

ptr=a;

for(i=0;i<3;i++)

for(j=0j<4;j++)

printf("%4d",((ptr+i)+j));

其中(a+i)+j是二维数组a的i行j列的首地址。其元素的值为((a+i)+j);


指针与函数

函数指针变量的的定义形式一般为:

类型说明符 (*指针变量名)();

int (*ptr)();

int add(int a,int b);

void result(int (*ptr)(),int a,int b);

ptr=add;

result(ptr,i,j);

void result(int (*ptr)(),int a,int b)

{int vlaue;

valye=(*ptr)(a,b);

printf("%d",value);

}


指针形函数返回指针值得函数称为指针形函数

类型说明符 *函数名(形参表)

{函数体

}

int *pfun(int x,int y)

{

}


例 利用指针函数编写一个秋字符串的函数


指针与字符串

void main()

{char *p,*str="how do you do";

printf("%s",str);

}


字符指针作为函数参数

void catstr(char *dest,char *src)

{while(*dest)

dest++;

while(*dest++=*src++);

}


字符指针与字符数组的区别

(1)字符指针本身是一个变量,它的值可以改变,而字符数组的数组名虽然代表该数组的首地址,但它是常量,它的值不能改变。

(2)赋初值所代表的意义不同

对于字符指针

char *ptr="hello world";

char *ptr,ptr="hello world";

对字符数组进行初始化

char str[]="hello world";不能写为char str[80];str="hello world";

实际赋值时,只能对字符数组的各个元素逐个赋值


定义数组时,编译系统为数组分配内存空间,有确定的地址值,而定义一个字符指针时,低所指的指针是不确定的。

对于字符数组可以这样使用

char str[80];

scanf("%s",str);

对于字符指针,应申请分配内存,取得确定地址

char *str;

str=(char *)malloc(80);

scanf("%s",str);

这个情况会使程序很不稳定

char *str;

scanf(“%s”,str);


指针数组

类型说明 *数组名[数组长度];char*str[4];指该指针数组包含4个指针。

<#include

void main()

{

char *ptr1[4]={"Cat","Mouse","Dog","Sugar"};

int i,*ptr2[3],a[3]={1,2,3},b[3][2]={1,2,3,4,5,6};

for(i=0;i<4;i++)

printf("\n%s",ptr1[i]);

printf("\n");

for(i=0;i<3;i++)

ptr2[i]=&a[i];

for(i=0;i<3;i++)

printf("%4d",*ptr2[i]);

printf("\n");

for(i=0;i<3;i++)

ptr2[i]=b[i];

for(i=0;i<3;i++)

printf("%4d%4d\n",*ptr2[i],*ptr2[i]+1);

}>


指向指针的指针

类型说明符 **指针变量名;

float **ptr;

其含义是定义一个指针变量ptr,它指向另一个指针变量(该指针变量又指向一个实形的变量),由于指针运算符“*”是自右向左结合,所以上述定义相当于:

float * *ptr;


指针运算小结

int i,j,a[10],b[5][9],*p,*q,(*pi)[9],*pa[5];

char *ps;

char pas[]={"abc","defghij,kn"};//字符常量的首地址分别赋给指针数组pas[0],pas[1],pas[2];

p=&i;将一变量地址赋给指针变量p

q=p;//p和q是指针变量,将p的值赋给q;

q=null;//将null空指针赋给指针变量q;

p=(int)malloc(5*sizeof(int));//分配10个字节的储存单元,并把首地址赋给P

p=a;//将a的首地址赋给指针变量P;

p=&a[i];//将一维数组a的第i个元素赋给指针变量P

p=&b[i][j];//将二维数组b[i][j]的地址赋给变量P

pi=b+i;//等价pi=&b[i],将pi指向二维数组b的第i行

for(i=0;i<5;i++)

pa[i]=b[i];//分别将二维数组b的第i行的第0列元素赋给

ps="hello";//将字符串常量赋给指针变量ps。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: