怎样给char怎么赋值类型指针赋值但不覆盖之前的内容

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

打代码时发现如下两个例子均为正确的赋值方式:

然而p2中的值可以改变(例:p2[1] = 'd'),若想改变p1中的值(例:p1[1] = 'd')就无法编译通过

原因:char怎么赋值 * 实际上定义了指向字符串的指针,由于指向的内容由编译器分配在文字常量区(存放常量字符串程序结束后由系统释放)中,无法改变其值

char怎么赋值 [] 分配在栈中(由编译器自动分配释放,存放函数的参数值局蔀变量的值等。其操作方式类似于数据结构中的栈)其值可改变。

若相对char怎么赋值 *进行初始化可采用的方式有:

若子函数要求返回char怎麼赋值 * 类型,可采用如下方式:

发布了53 篇原创文章 · 获赞 5 · 访问量 3万+

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

通常大家会遇到这样的问题:

char怎么赋值 * p = "abc";可以顺利执行,而int *a = 1;确运行不了(这里指运行環境是VCGCC竟然可以成功执行,这里我也比较迷惑)

这里都是我的个人看法:

这句话的代码从人类语言的理解上,就是给一个指针赋值并指向一个值为1的地址但是编译器它不是人,它只知道char怎么赋值型的指针可以直接“赋值”而int型的指针如果“赋值”怎么做呢?通常有兩种做法:

那么r中的值就为1但是这里的r却不是我们想要的指针变量。

如果说一定要给int型指针变量赋值我们采用:

的话,结果却是i的内存地址怎么回事呢?在解决问题之前我先举个例子:

这个结果从两个角度解释,

角度二(指针内容和地址):

aa和bb存的都是相同的指针地址
aaa和bbb虽然都是 "abc",但地址不一样

既然这个问题能够理解清楚,那么从这两个角度来说给指针一个内容那么就不能跟我们传统意义上的“赋值”相提并论。因为对于问题中int *a = 1;来说这个1 是整型数据不能放入静态存储区而从内容和地址来说,如果像上述两种赋值方式得到的只能是内存的地址而不是内容。

}

我要回帖

更多关于 char怎么赋值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信