日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 字符串和指针

發布時間:2025/5/22 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 字符串和指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用指針實現的字符串:

#include <stdio.h>int main(void){char *p = "vv";printf("p = \"%s\"\n", p);p = "cat";printf("p = \"%s\"\n", p);return 0; }

運行結果:

char *p = "vv"; printf("p = \"%s\"\n", p);

用指針實現的數組 p:
p 是指向char型變量的指針變量,它的初始值為字符串字面量 “vv”。對字符串字面量進行判定,可以得到指向該字符串字面量第一個字符的指針。所以 p 被初始化為指向保存在內存中的字符串字面量“vv”的第一個字符串’v’的指針。

使用指針實現字符串的錯誤聲明:

char * p = {'v', 'v', 'c', 'a', 't', '\0'};

數組用的{}形式的初始值,不可用于單一的變量。

在內存空間中,指針 p 和 字符串字面量 “vv” 雙方都占據了內存空間。

#include <stdio.h>int main(void){char *p = "vv";printf("p = \"%s\"\n", p);printf("sizeof(p) = %u \n", sizeof(p));printf("sizeof(\"vv\") = %u \n", sizeof("vv"));return 0; }

運行結果:

指針 p 占用的空間為 sizeof§,即 sizeof (char*)字節,其長度因編譯器而異。
所以,用指針實現的字符串比用數組實現的字符串需要更多的內存空間。


char *p = "vv"; printf("p = \"%s\"\n", p); p = "cat"; printf("p = \"%s\"\n", p);

用數組實現的字符串和用指針實現的字符串的不同的地方是:
可以為指向字符串字面量(中的字符)的指針賦上指向別的字符串字面量(中的字符)的指針。賦值后,指針指向新的字符串字面量(中的字符)。

注意:
p的中的字符串發生變化,并不是完全復制了字符串,在內存中指針的指向發生了變化,指針不再指向“vv”,“vv”不能被訪問,在內存中變成了無法被清楚的垃圾。因為字符串字面量具有靜態存儲器,在不需要的情況下,不會自動被從內存空間清除。


#include <stdio.h>int main(void){char str[] = "2020";printf("str = \"%s\"\n", str);str = "07/08"; // 此賦值方式 在字符串數組中不可以使用,編譯錯誤printf("str = \"%s\"\n", str);return 0; }

字符串數組直接賦予數組變量,以下3種是錯誤的賦值方式:
char str[6];

  • str = {‘V’, ‘V’, ‘c’, ‘a’, ‘t’, ‘\0’};
  • str = “VVcat”;
  • str = {“VVcat”};

  • #include <stdio.h> #define LEN 6 int main(void){int i ;char a[][LEN] = {"2020", "7", "vvcat"};char *p[] = {"2020", "7", "vvcat"};for(i = 0; i < 3; i++){printf("a[%d] = \"%s\", sizeof(a[%d]) = %u \n", i, a[i], i, sizeof(a[i]));}puts("---------------------------");for(i = 0; i < 3; i++){printf("p[%d] = \"%s\" sizeof(p[%d]) = %u \n", i ,p[i], i, sizeof(p[i]));}puts("---------------------------");printf("sizeof(p) = %u \n", sizeof(p));printf("sizeof(\"2020\") = %u \n", sizeof("2020"));printf("sizeof(\"7\") = %u \n", sizeof("7"));printf("sizeof(\"vvcat\") = %u \n", sizeof("vvcat"));return 0; }

    運行結果:

    可以看出二維數組和指針數組雖然都能實現對多個字符串的儲存,但是其本質是完全不一樣的,一個是定義時就已經分配了儲存字符串的空間,而另一個只是定義了指向字符串的指針,本身并不具有儲存字符串的空間,需要現給其一個指向,才能將字符串儲存到相應的位置,指針也要占用一定的內存空間。

    總結

    以上是生活随笔為你收集整理的C语言 字符串和指针的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。