A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘鹿杰_FXr64 中级黑马   /  2015-7-19 13:07  /  575 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第十一天
1.一维数组指针                                                                                                                   注意:
(1)数组名不代表整个数组,只代表数组的首元素的地址(是一个常量,若数组名++,是不对的)。
(2) “P=a”,的作用是“把a 数组的首元素地址付给指针变量 P”,而不是把数组a各个元素的值付给P。
2. 一维指针数组:一个数组元素值为指针则为指针数组,
    格式为:类型说明符 *数组名[数组长度];
应用:数组的逆序:
#include <stdio.h>
void nixu(int *p,int len){
    int *x,*i,*j,m=(len-1)/2,temp;
    i=p;j=p+len-1;x=p+m;
    for (;i<x; i++,j--) {
        temp=*i;
        *i=*j;
        *j=temp;
    }
}
int main(int argc, const char * argv[]) {
    int i=0,a[10];
    printf("请输入十个数字:以空格隔开\n");
    for (int i=0; i<10; i++) {
        scanf("%d",&a[i]);
    }
    for (int i=0; i<10; i++) {
        printf("您输入的十个数字是:%d\n",a[i]);
    }
    nixu(a,10);
    for (int i=0; i<10; i++) {
        printf("%d\t",a[i]);
    }
    return 0;
}
指针变量之间可以做减法运算,主要为了判断两个指针变量是否连续,或者判断两个指针变量之间相隔几个元素:   具体计算公式为:(地址1-地址2)/sizeof (所指向的数组)。
关系运算:  如果p1>p  运算结果为1,表示p1在高位,为0,表示p在高位。
3. 二维数组指针: 数组指针变量说明:
    一般形式为:数据类型(*指针变量名)[二维数组列表];
二维数组的行指针和列指针:




4.字符串指针   格式为:char   *变量名=”字符串内容”,(字符串内容是常量),作用是保存一个字符串。    *str=“abc”  str 只是保存了字符串常量的首地址,是一个指针变量。字符串保存在常量区,在常量区保存的数据都只是可读的,不可以改变。
5.二维字符串数组的概念:
        一维字符数组   char  ch[10]={‘a’,’b’};或者  char  ch[]=“abc’;
         二维字符数组  char ch[3][10]={{‘a’,’b’},{‘b’},{‘c’}};  或者 char ch3[3][10]={“abc”,”def”,”erf”};
   字符串类型的指针数组  格式   char  *name[3]={“abc”,”def”};
应用例题:字符串排序:
#include <stdio.h>
#include <strings.h>

void sort(char *name[],int n){
    char  * temp;
    for (int i=0; i<n-1; i++) {
        for (int j=1; j<n; j++) {
            if (strcmp(name[i], name[j])<0) {
                temp=name[i];
                name[i]=name[j];
                name[j]=temp;
            }
        }
    }
}

int main(int argc, const char * argv[]) {
    char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Compter Design"};
    int n=5;
    sort(name, n);
    for (int i=0; i<5; i++) {
        printf("%s\n",name[i]);
    }
    return 0;
}
6. 有关二维数组a的有关指针:


7.分析如下代码:
#include<stdio.h>
int main() {
//        定义一个指针变量
        int a=5;
        int *p =&a;
        printf("p =%p\n",p);
        printf("&a=%p\n",&a);
//        定义一个二级指针
        int **p1 =&p;
        int *p2=p;
        printf("&p=%p\n",&p);
        printf("p=%p\n",p1);
        printf("%p",p2);
       
}













0 个回复

您需要登录后才可以回帖 登录 | 加入黑马