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