2.12一级指针的值修改
Posted wlstm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.12一级指针的值修改相关的知识,希望对你有一定的参考价值。
【注:自己从老师讲解出理解的,不对的地方望指正】
【注:本程序验证是使用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]; //改变指针变量(就是改变指针的指向) printf(" a(1):%d\\n", a); printf("*a(1):%c\\n", *a);
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;
以上是关于2.12一级指针的值修改的主要内容,如果未能解决你的问题,请参考以下文章
C 语言一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )