首页 > 编程语言 > 详细

指针与数组

时间:2016-02-24 22:32:31      阅读:224      评论:0      收藏:0      [点我收藏+]

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

示例代码:

#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\n",array,&array[0]);
    //十六位的地址 
    //两个地址的值,并且两个地址相同。 
    
    printf("*p = %d\n",*p);
    //1 
    printf("*p1 = %d\n",*p1);
    //1
    printf("sizeof(array) = %d,sizeof(p1) = %d\n",sizeof(array),sizeof(p1));
    //40,8
    printf("%d,%d\n",sizeof(int *),sizeof(char *));
    //8,8
    printf("array =%p,*array =%p,&array = %p\n",array,*array,&array);
    //地址的值,跟上面的结果一样的,15个0后面1,(如果是32位的操作系统的话,应该是7个0后面一个1),地址的值,跟最上面一样 
    
    //这个结果是什么呢? 
    printf("%d\n",*((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\n",*(pc+3));
    int i = 0x12345678;
     
    char *cpi = (char *) &i;
    printf("%x,%x,%x,%x\n",*(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\n",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;
}

 

指针与数组

原文:http://www.cnblogs.com/letben/p/5215295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!