C语言基础:C语言指针(6) - 指针和字符串
下面我們來看一個小例子:
#include <stdio.h>int main() {char name[] = "abcde";name[0] = 'A';printf("%s\n", name);char *name2 = "it";name2[0] = 'I';printf("%s\n", name2);return 0; }輸出的結(jié)果:
第一個輸出的結(jié)果為Abcde, 第二個輸出不了, 程序直接崩潰了, 這是為什么呢? 按照我們上一節(jié)課所學(xué)的內(nèi)容, char *name2指向的地址是"it", 這是沒錯的, 但為什么不能修改呢? 讓我們來仔細研究一下:
這里涉及到內(nèi)存的問題, 我們來看看內(nèi)存有幾種常用的方式:
1. 常量區(qū): 存放一些字符串常量, 比如像char *name2;
2. 棧: 存放局部變量, 比如像char name[];
3. 堆: 存放對象, 暫時沒有學(xué)到
存放在棧里的變量, 是可以隨意賦值修改的, 而存放在常量區(qū)里的是不能隨意修改, 并且是會緩存起來, 等待隨時調(diào)用.
比如:
char *name = "ab";char *name2 = "ab";其實上面兩個指針變量的地址是一樣的, 因為是存在常量區(qū)里, 當有變量調(diào)用, 常量區(qū)就會返回給變量調(diào)用, 如果沒有調(diào)用, 則一直存放在常量區(qū), 好處在于不用再重新給該常量字符串重新分配內(nèi)存.
我們必須掌握定義字符串的兩種知識:
?1> 利用數(shù)組
?char name[] = "abcd";
? * 特點:字符串里面的字符是存儲在棧上, 是可以修改的
? * 使用場合:字符串的內(nèi)容需要經(jīng)常修改
?
?2> 利用指針
? char *name = "ABCD";
? * 特點:字符串其實是一個常量字符串,是存儲在常量區(qū)里面的, 所以是不能修改
? * 使用場合:字符串的內(nèi)容不需要修改,而且這個字符串經(jīng)常使用
?
這次我們講到這里, 下次我們繼續(xù)~~~轉(zhuǎn)載于:https://www.cnblogs.com/iOSCain/p/4282889.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的C语言基础:C语言指针(6) - 指针和字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UIImage指定区域自由拉伸
- 下一篇: HID 设备(鼠标) report d