`
445822357
  • 浏览: 743560 次
文章分类
社区版块
存档分类
最新评论

小小的C语言问题指针数组赋值----关于指针和数组。

 
阅读更多

先上代码吧:

#include <iostream>
#include <cstring>
using namespace std ;

int replacefun(char* str, char c1, char c2);

int main(void)
{
	char * p = "I love you China, do you love me?";    // 用指针的形式定义一个字符数组
	int m = 0;
	m = replacefun(p, 'o', 'c');
	cout << m << endl;
	return 0;
}

int replacefun(char* str, char c1, char c2)
{
	int num = 0;
	while (*str != '\0')
	{
		if (*str == c1)
		{
			*str = c2;  // 这句话调试的时候内存报错
			num++;
		}
		str++;
	}
	return num;
}

这个程序实现的目的的是替换指定的字符,在编译的时候没有任何错误,但是在运行的时候,程序意外终止。


于是,启动利器,单步调试。。。跳进函数后,发现在*str到达'o'之前一切正常,不过。。到了'o'之后,结果说内存错误,无法赋值。


经过多方查找资料和询问,得知:

char *p="abcde";的时候,字符串是不可以修改的!
而char p[]="abcde";的时候,字符串是可以修改的!
同一个字符串,用指针定义的时候在常量区,而用数组定义的时候在栈中。
就是刚刚上面的那个
I love you China, do you love me?
是一个常量。

据大婶说:

"IloveyouChina,doyouloveme?"
在存放在.rodata段,该段是只读的,当你强行做修改的时候,当然要报错喽。


而定义为数组的形式之后:就把这个字符串拷贝进数组了,对于数组中的内容,可以随便修改呀.原来的字符串还是不变的。。。


以上总结,涨姿势了。


继续C++。


算法未完待续。。。


分享到:
评论

相关推荐

    指针数组和数组指针的区别.doc

    这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还...

    C语言数组指针编程

    定义一个长度为10的int数组nArr,采用给定初始值或从键盘输入的方式给数组的10个元素赋值;定义一个int *型指针变量pInt,并将nArr的首地址存入pInt中

    C语言学习笔记变量数组指针

    自己学习过程中记录的一些信息,可能不全C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针C语言学习笔记变量数组指针

    C语言中数组与指针的使用技巧

    C语言中数组与指针的使用技巧

    C语言中对数组赋值的三种形式

    在C语言中,对数组进行赋值的三种形式 方法如下: 1、通过循环的形式 即:数组名[下标] 对数组的元素进行依次赋值 #include int main() { int i; int a[10] = {0}; for(i=0;i&lt;10;i++) { scanf(%d,&a[i]);...

    VB6指针修改数组,多种方法变量赋值速度对比

    相关技术:如果有个共享...【新提醒】【VB6】在VB6里实现“指针类型”——像C语言的[]那样用()来读写内存中的数组! - 技术宅的结界 - Powered by Discuz! https://www.0xaa55.com/forum.php?mod=viewthread&tid=10948

    自学去c语言视频教程

    31) C语言之二维数组和多维数组 32) C语言之指向数组的指针 33) C语言之保护数组内容const的使用 34) C语言之指向多维数组的指针 函数 35) C语言之函数的定义和调用 36) C语言之定义带参数的函数 37) C语言之函数之...

    C语言全套视频教程 视频.txt

    31) C语言之二维数组和多维数组 32) C语言之指向数组的指针 33) C语言之保护数组内容const的使用 34) C语言之指向多维数组的指针 函数 35) C语言之函数的定义和调用 36) C语言之定义带参数的函数 37) C语言之函数之...

    C语言给结构体指针赋值[借鉴].pdf

    C语言给结构体指针赋值[借鉴].pdf

    C语言一维数组初步学习笔记

    数组 可以存储一组或者多组数值的变量,里面包含多个元素,数组的每个成员都是一个数组元素。...当数组元素个数为变量时,只能声明数组,不能直接赋值: int length = 4; int a[length]; //这样可以

    关于C语言指针赋值的问题详解

    本篇文章是对C语言指针赋值的问题进行了详细的分析介绍,需要的朋友参考下

    C语言程序设计-指针与函数.pptx

    指针与函数 4-1 函数型指针变量的...函数名为指针赋值时,不必用参数。 函数指针调用函数时,用(*pf)代替原函数名。 指向函数的指针变量pf,如果作pf±n,pf++,pf--运算,则没有意义。 4-2 函数型指针的赋值 【例8.

    C语言程序设计-指针与字符串.pptx

    用字符串常量为字符指针初始化,其形式与字符数组的初始化类似,却有本质上的区别:字符数组获得字符串所有的字符,而字符指针获得字符串首地址,与字符串内的字符无关。 【例8.4】用指向字符串的指针变量完成两个...

    C语言学习之指针赋值ppt.zip

    C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言...

    二维数组和指针

    关于二维数组和指针的介绍,非常好! 二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的每一个成员又是一个一维数组。如以上定义的a数组,则可视a数组由a[0]、a[1]、a[2]...

    《C语言程序设计》-PDF格式

    7.3.2 指向结构体类型数组的指针的 使用 136 7.4 链表的建立、插入和删除 138 7.4.1 单链表 139 7.4.2 单链表的插入与删除 141 7.5 共用体 149 7.5.1 共用体的定义 149 7.5.2 共用体变量的引用 150 第8章 输入、输出...

    深入理解数组指针与指针数组的区别

    数组指针与指针数组的区别在于:数组指针p是一个指针,而指针数组p是一个存放N个指针变量的数组。 一、数组指针int (*p)[n]重点:()优先级高([]、()的优先级是一样的,但它们的方向是从左至右的,所以先运行括号里的...

    C语言数组入门之数组的声明与二维数组的模拟

    这篇文章主要介绍了C语言数组入门之数组的声明与二维数组的模拟,数组学习的同时也要相应理解C语言指针的作用,需要的朋友可以参考下

    C语言指针的定义和使用

    c语言指针 指针就是内存中的一个地址编号,指针变量用于存储地址,指针变量也是一个变量。 内存中的每一个数据都会分配相应的地址 char 占内存一个字节,分配一个地址 int 占内存四个字节,分配四个地址 windows电脑...

Global site tag (gtag.js) - Google Analytics