zoukankan      html  css  js  c++  java
  • 指针与数组

    前面的东西都比较基础,后面的这个才是真正关键的地方。

    示例代码:

    #include <iostream>
    #include <stdlib.h> 
    
    
    int main(int argc, char *argv[]) {
        //argc 指的是参数个数
        // argv[0]指的是程序的名字
        // argv[1]值的是程序执行的第一个参数
        
        int array[10]={1023,2,3,4,5,6};
        int *p = &array[0];
        int *p1 = array;
        
        printf("%p,%p
    ",array,&array[0]);
        //十六位的地址 
        //两个地址的值,并且两个地址相同。 
        
        printf("*p = %d
    ",*p);
        //1 
        printf("*p1 = %d
    ",*p1);
        //1
        printf("sizeof(array) = %d,sizeof(p1) = %d
    ",sizeof(array),sizeof(p1));
        //40,8
        printf("%d,%d
    ",sizeof(int *),sizeof(char *));
        //8,8
        printf("array =%p,*array =%p,&array = %p
    ",array,*array,&array);
        //地址的值,跟上面的结果一样的,15个0后面1,(如果是32位的操作系统的话,应该是7个0后面一个1),地址的值,跟最上面一样 
        
        //这个结果是什么呢? 
        printf("%d
    ",*((char *)p1+1));
        //这个地方很奇怪,总是觉得有问题。 
        //但是好像就是 0啊。 
        return 0;
    }

    运行结果:

    这个地方多少有点儿出入,就是为了把那个 结果试出来。所以能看得出来,开始数组里面第一个数字给的是1.

    来看看为什么最后一行的结果是3.前面的不知道为什么的同学可以看看这个地址里面书写的内容:

    http://www.cnblogs.com/letben/p/5213967.html

     

    void function2(void){
        //上面的如果看懂了的话,下面的都比较简单了 
        char buf[10] = {"abcdef"};
        char *pc = buf;
        printf("%c
    ",*(pc+3));
        int i = 0x12345678;
         
        char *cpi = (char *) &i;
        printf("%x,%x,%x,%x
    ",*(cpi+0),*(cpi+1),*(cpi+2),*(cpi+3));
        
    }

    运行结果:

    这个表现出操作系统相关性,如果是一般的windows,或者linux都是这种先输出小端的,如果是服务器型的unix的话,就会出现12,34,56,78的结果。

     

    利用指针进行赋值:

    代码:

    /**
        利用指针进行赋值。 
    */
    void function3(void){
        int array[10]={0};
        int *p = array;
        for(int i = 0;i<10;i++){
            scanf("%d",p++);
        } 
        for(int i= 0;i<10;i++){
            printf("%d
    ",array[i]);
        }    
    }

    运行结果:

    /**
        指针数组 与数组指针 
    */
    void function4(void){
        char *s[10];//指针数组 
        char (*s1)[10];//数组指针
        //第一个表达的意思是,有一个数组,里面有10个元素,每个元素都是一个指向 字符数组 类型 的 指针变量。
        //所以可以有 
        char c1[2]; 
        char c2[3];
        char c3[4];
        s[1] = c1;
        s[2] = c2;
        s[3] = c3;
        //第二个是数组指针,是一个指向有10个字符大小的字符数组的指针变量。
        char cc[2][10];
        //[Error] cannot convert 'char [2][5]' to 'char (*)[10]' in assignment
        s1 = cc;
        s1 = &cc[1];
        //这些东西 明天好好在理解一下 
        int i;
        int * p;
        p = &i;
        //同理:
        char mychars[10];
        s1 = &mychars;
    }
  • 相关阅读:
    ExtJs学习笔记之ComboBox组件
    ExtJs学习笔记之学习小结LoginDemo
    ExtJs学习笔记之Button组件
    ExtJs学习笔记之TextField
    WAF指纹识别和XSS过滤器绕过技巧
    python中的迭代与递归
    使用Python对文档单词进行计数
    Python正则表达式使用实例
    Python十六进制与字符串的转换
    数组名a,数组名取地址&a,数组首地址&a[0],数组指针*p
  • 原文地址:https://www.cnblogs.com/letben/p/5215295.html
Copyright © 2011-2022 走看看