指针与数组

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

示例代码:

#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;
}
原文地址:https://www.cnblogs.com/letben/p/5215295.html