2.12一级指针的值修改

ぃ、小莉子 提交于 2020-01-13 05:19:09

【注:自己从老师讲解出理解的,不对的地方望指正】
【注:本程序验证是使用vs2013版】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)

int main(void){
    char buf[] = "abcde";

    /*1、修改指针的值(改变指针的指向)*/
    char *a = NULL;
    printf(" a:%d\n", a);
    a = &buf[0];    //改变指针变量(就是改变指针的指向),a指向了数组buf的首地址
    printf(" a(1):%d\n", a);
    printf("*a(1):%c\n", *a);/这里应该是a[0]  
    a = a + 1;        //改变指针变量(就是改变指针的指向)
    //此处等价于  p = &buf[0+1]
    printf(" a(2):%d\n", a);
    printf("*a(2):%c\n", *a); //指针的一个长度时4,字符串的一个长度也是4, p -> a      p+1 -> b
    
    /*2、不断改变指针的指向*/
    char *b = NULL;
    b = &buf[0]; //等价于 b = buf ;
    for (int i = 0; i < strlen(buf); i++){
        b++; //等价于    b = &buf[i];
        printf(" b:%d\n", b);
        printf("*b:%c\n", *b);
    }  
  /*3、改变指针指向的内存,并不会影响到指针的值*/
    printf("buf = %s\n", buf);   
   
    //4、不允许向NULL、未知、非法 地址拷贝内容*/
    //char *c = NULL;
    //strcpy(c,"111"); //报错

    char *d = (char *)malloc(100);
    if (d == NULL){ return    -1; }
    strcpy(d, buf);
    for (int i = 0; i < strlen(buf); i++){
        d += 1;
        printf("*d = %c\n", *d);//这种情况下可以更改,这个存放在堆区
    }  

    /*写内存时,一定要确保内存是可变的*/
    //char *buf2 = "abcd";//文字常量区,内存不可以修改
    //buf2[2] = '1'; //这样写会报错

    char buf3[] = "abcd"; //这种情况下可以更改,因为buf3的内容在栈区
    buf3[1] = 'm';

    printf("\n");
    system("pause");
    return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!