Chinaunix首页 | 论坛 | 博客
  • 博客访问: 331163
  • 博文数量: 69
  • 博客积分: 2090
  • 博客等级: 大尉
  • 技术积分: 708
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-23 09:31
文章分类

全部博文(69)

文章存档

2012年(1)

2011年(4)

2010年(48)

2009年(14)

2008年(2)

我的朋友

分类: C/C++

2010-06-22 22:36:33

一、数组指针

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
#include
#include

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

阅读(987) | 评论(0) | 转发(0) |
0

上一篇:函数指针

下一篇:QT中QTableWidget使用

给主人留下些什么吧!~~