文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>数组指针和指针数组

数组指针和指针数组

时间:2010-06-22  来源:chinawanglun

一、数组指针

1、数组指针--指向数组的指针
2、声明:

int (* ptr)[100] = NULL; //声明指向数组的指针,数组内有100个int元素
char (* ptr1)[10] = NULL;


3、访问数组指针指向数组的元素
   (* ptr)[i];// 访问第一i个元素
    或者 *(*ptr+i)
   
 4、数组指针的使用
  int a[100];
  正确的赋值方式:
   ptr = &a;//
   或者 ptr = (int (*)[100])a;
  错误的赋值方式:ptr=a;
   因为:数组的名字会被隐式地转换为指向数组第一个元素的指针。而数组指针是指向整个数组的指针,所以ptr=a这种赋值方式不正确。必须显示地强制类型转换ptr = (int (*)[100])a;或者p = &a,这里&a也是可以到指向数组的指针。
5、数组指针的举例:
    

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int a[10] = {1,2,3,4,5,6};

    int (*ptr)[10] = NULL;//数组指针     ptr = (int (*)[10])a;//通过显示类型转换为ptr赋值    
    printf("%p %p\n",ptr,a);
    printf("%d ",(*ptr)[2]);     printf("%d\n",*(*ptr+4));
    return 0;
}

  函数的执行结果  0xbfa82dd4 0xbfa82dd4
                3 5
  

  可以看出ptr存放的内存地址和a所存放的内存地址是一样的都指向数组的首地址。但是ptr是指向数组的指针,而a被隐式地转换为指向数组第一个元素的指针。
  对ptr+1加的长度是整个数组的长度,而a+1加的加的长度是一个数组元素的长度。
  ptr是变量可以自加,自减操作。而a是变量,不能执行自加自减少。

   
  二、指针数组
   1、指针数组--数组元素都是指针类型的数组
   2、声明
     char *str[10];//声明一个有10个元素的数组,每个元素都是一个char *型指针。
     int *array[10];//声明一个有10个元素的数组,每个元素都是一个指向int *型指针
   3、数组指针的使用
    

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char *str[5];//定义数组指针
    char s[10];
    int i = 0;
    for (;i < 5;++i)
    {   
        printf("输入一个字符串:");
        scanf("%s",s);
        str[i] = (char *)malloc(sizeof(s));//给每个指针分配内存
        strcpy(str[i],s); //复制字符串
    }

    for (i = 0;i < 5;++i)
    {
        printf("str[%d] = %s\n",i,str[i]);
    }

    for (i = 0;i < 5;++i)
    {
        free(str[i]);//释放内存
    }

    return 0;
}


程序的执行结果如下:
输入一个字符串:aaaaa        
输入一个字符串:bbbbbb
输入一个字符串:ccccc
输入一个字符串:ddddddddd
输入一个字符串:eeeee
str[0] = aaaaa
str[1] = bbbbbb
str[2] = ccccc
str[3] = ddddddddd
str[4] = eeeee

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载