C語(yǔ)言中char*和char[]用法區(qū)別分析
本文實(shí)例分析了C語(yǔ)言中char* 和 char []的區(qū)別。分享給大家供大家參考之用。具體分析如下:
一般來(lái)說(shuō),很多人會(huì)覺(jué)得這兩個(gè)定義效果一樣,其實(shí)差別很大。以下是個(gè)人的一些看法,有不正確的地方望指正。
本質(zhì)上來(lái)說(shuō),char *s定義了一個(gè)char型的指針,它只知道所指向的內(nèi)存單元,并不知道這個(gè)內(nèi)存單元有多大,所以:
當(dāng)char *s = "hello";后,不能使用s[0]='a';語(yǔ)句進(jìn)行賦值。這是將提示內(nèi)存不能為"written"。
當(dāng)用char s[]="hello";后,完全可以使用s[0]='a';進(jìn)行賦值,這是常規(guī)的數(shù)組操作。
若定義:
char s[] = "hello"; char *p = s;
也可以使用p[0] = 'a';因?yàn)檫@是p ==s,都是指向數(shù)組的指針。
下面看另外一種定義:
char *s = (char *)malloc(n(www.dbjr.com.cn));//其中n為要開(kāi)辟空間的大小
這句話其實(shí)相當(dāng)于:
char s[n];
定義的也是一個(gè)指向數(shù)組的指針,便可進(jìn)行數(shù)組的下標(biāo)操作
例子
#include <stdio.h> int main(int argc, char* argv[]) { char* buf1 = "this is a test"; char buf2[] = "this is a test"; printf("size of buf1: %d\n", sizeof(buf1)); printf("size of buf2: %d\n", sizeof(buf2)); return 0; }
結(jié)果是:
$ > ./main
size of buf1: 4
size of buf2: 15
相信本文所述對(duì)大家C語(yǔ)言程序設(shè)計(jì)的學(xué)習(xí)有一定的借鑒價(jià)值。
相關(guān)文章
C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼
這篇文章主要介紹了C++ leetcode之刪除并獲得點(diǎn)數(shù)的示例代碼,本文給大家分享問(wèn)題解析及解決方案,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05C++實(shí)現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出
本文給大家介紹的是一則使用C++實(shí)現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出的代碼,實(shí)現(xiàn)起來(lái)其實(shí)非常簡(jiǎn)單,C++本身就提供了二進(jìn)制類(lèi)庫(kù)的,大家看代碼吧,簡(jiǎn)單又實(shí)用。2015-03-03C語(yǔ)言求兩個(gè)字符串的最長(zhǎng)公共子串
這篇文章主要介紹了C語(yǔ)言求兩個(gè)字符串的最長(zhǎng)公共子串,實(shí)例分析了C語(yǔ)言操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(186.翻轉(zhuǎn)字符串中的單詞之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08