Rumah php教程 PHP开发 字符串指针与字符数组的区别

字符串指针与字符数组的区别

Dec 12, 2016 pm 05:22 PM
tatasusunan rentetan

    用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:

1.     字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

2.     对字符串指针方式

char *ps="C Language";

可以写为:

    char *ps;

ps="C Language";

而对数组方式:

    static char st[]={"C Language"};

不能写为:

    char st[20];

    st={"C Language"};

而只能对字符数组的各元素逐个赋值。

     从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。

当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。
一个错误的例子,如下:       
           char *name;
           scanf("%s",name);
           printf("%s",name); 
 有的编译器虽然也能通过,但这是错误的,因为是个指针,定义时指向不可用的地址。解决这个问题有两种方法:用数组的方法或给字符针针分配内存空间的方法。
           数组的方法:
                 char name[20];
                 scanf("%s",name);
                 printf("%s",name); 
     
        给字符针针分配内存空间的办法: 
                 char *name;
                 name=(char*)malloc(50);      //此时name已经指向一个刚刚分配的地址空间。
                 scanf("%s",name);
                 printf("%s",name);

但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。

3.int  main()

{ char str1[40]="hello world!";    
 //char *str1="hello world!"; 
 str1[4]='A';                
      //若str1是指针型的,编译通过,但运行是此处会段错误
       printf("%s\n",str1); 
       return 0;
        }
Salin selepas log masuk

数组和指针都可以在它们的定义中用字符串常量进行初始化,尽管看上去一样,底层的实现机制却不相同。

定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义的同时赋值给指针一个字符串常量进行初始化。例如:下面的定义创建了一个字符串常量(为其分配了内存):

char *p=”abcdefg”;

注意只有对字符串常量才是如此,不能指望为浮点数之类的常量分配空间,如:

Float *p=3.14; /*错误,无法通过编译*/

下面结合一个实例谈谈初始化指针时创建的字符串常量与数组中的字符串的区别:

在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。

数组也可以用字符串常量进行初始化:

Char a[]=”abcdefg”;

如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。

下面是一个在vc6中的一个例子,完成将一个字符串中的所有大写字母全部转换为小写字母的功能:

View Code  
  #include<iostream.h>  
 #include<ctype.h>  
    
   /******************************************************************************/  
  /* 
   *    Convert a string to lower case 
   */  
    
  int strlower(char *string)  
 {  
     if(string==NULL)  
     {  
         return -1;  
     }  
   
     while(*string)  
     {  
         if(isupper(*string))  
             *string=tolower(*string);  
         string++;  
     }  
     *string=&#39;\0&#39;;  
     return 0;  
 }  
 /*char *strlower(char *string) 
 { 
     char    *s; 
  
      
  
     if (string == NULL) { 
         return NULL; 
     } 
  
     s = string; 
     while (*s) { 
         if (isupper(*s)) { 
             *s = (char) tolower(*s); 
         } 
         s++; 
     } 
     *s = &#39;\0&#39;; 
     return string; 
 } 
 */  
   
 void main()  
 {  
     char *test="ABCDEFGhijklmN";  
     strlower(test);  
     cout<<test<<endl;  
 }
Salin selepas log masuk

其中,如果采用char *test=”ABCDEFGhijklmN”;会产生运行时错误。Char test[]=”ABCDEFGhijklmN”则程序正常运行,原因如前所述。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan fungsi split() dalam oracle Cara menggunakan fungsi split() dalam oracle May 07, 2024 pm 01:06 PM

Fungsi SPLIT() membahagikan rentetan kepada tatasusunan dengan pembatas yang ditentukan, mengembalikan tatasusunan rentetan di mana setiap elemen ialah bahagian yang dipisahkan pembatas bagi rentetan asal. Penggunaan termasuk: membahagikan senarai nilai yang dipisahkan koma kepada tatasusunan, mengekstrak nama fail daripada laluan, dan membahagikan alamat e-mel kepada nama pengguna dan domain.

Bagaimana untuk mengisih rentetan dalam java Bagaimana untuk mengisih rentetan dalam java Apr 02, 2024 am 02:18 AM

Cara untuk mengisih rentetan dalam Java: Gunakan kaedah Arrays.sort() untuk mengisih tatasusunan rentetan dalam tertib menaik. Gunakan kaedah Collections.sort() untuk mengisih senarai rentetan dalam tertib menaik. Gunakan antara muka Pembanding untuk menyusun rentetan tersuai.

Apakah maksud \0 dalam bahasa c Apakah maksud \0 dalam bahasa c Apr 27, 2024 pm 10:54 PM

Dalam bahasa C, \0 ialah tanda akhir rentetan, dipanggil aksara nol atau penamat. Memandangkan rentetan disimpan dalam ingatan sebagai tatasusunan bait, pengkompil mengecam penghujung rentetan melalui \0, memastikan rentetan dikendalikan dengan betul. \0 Cara ia berfungsi: Pengkompil berhenti membaca aksara apabila ia menemui \0 dan aksara seterusnya diabaikan. \0 sendiri tidak menduduki ruang storan. Faedah termasuk pengendalian rentetan yang boleh dipercayai, kecekapan yang dipertingkatkan (tidak perlu mengimbas keseluruhan tatasusunan untuk mencari penghujungnya), dan kemudahan perbandingan dan manipulasi.

Apakah maksud args dalam java Apakah maksud args dalam java Apr 25, 2024 pm 10:15 PM

args bermaksud argumen baris arahan dalam Java dan merupakan tatasusunan rentetan yang mengandungi senarai argumen yang dihantar kepada program apabila ia dimulakan. Ia hanya tersedia dalam kaedah utama, dan nilai lalainya ialah tatasusunan kosong, dengan setiap parameter boleh diakses oleh indeks. args digunakan untuk menerima dan memproses argumen baris arahan untuk mengkonfigurasi atau menyediakan data input apabila program bermula.

Apakah maksud args dalam java Apakah maksud args dalam java May 07, 2024 am 02:24 AM

args ialah tatasusunan parameter khas kaedah utama dalam Java, digunakan untuk mendapatkan tatasusunan rentetan parameter baris arahan atau input luaran. Dengan mengakses tatasusunan args, atur cara boleh membaca hujah ini dan memprosesnya mengikut keperluan.

Aplikasi teknologi kecerdasan buatan dalam fungsi PHP Aplikasi teknologi kecerdasan buatan dalam fungsi PHP May 01, 2024 pm 01:15 PM

Teknologi AI telah digabungkan dengan fungsi PHP untuk meningkatkan kefungsian aplikasi. Aplikasi AI khusus termasuk: menggunakan algoritma pembelajaran mesin untuk mengklasifikasikan teks, seperti Naive Bayes. Lakukan analisis teks yang mendalam menggunakan teknik pemprosesan bahasa semula jadi seperti pembahagian perkataan dan pembubuhan.

Bagaimana untuk mengisih aksara Cina dalam persekitaran bahasa C? Bagaimana untuk mengisih aksara Cina dalam persekitaran bahasa C? Feb 18, 2024 pm 02:10 PM

Bagaimana untuk melaksanakan fungsi pengisihan aksara Cina dalam perisian pengaturcaraan bahasa C? Dalam masyarakat moden, fungsi pengisihan aksara Cina adalah salah satu fungsi penting dalam banyak perisian. Sama ada dalam perisian pemprosesan perkataan, enjin carian atau sistem pangkalan data, aksara Cina perlu diisih untuk memaparkan dan memproses data teks Cina dengan lebih baik. Dalam pengaturcaraan bahasa C, bagaimana untuk melaksanakan fungsi pengisihan aksara Cina? Satu kaedah diperkenalkan secara ringkas di bawah. Pertama sekali, untuk melaksanakan fungsi pengisihan aksara Cina dalam bahasa C, kita perlu menggunakan fungsi perbandingan rentetan. Berlari

Apakah kesan fungsi C++ terhadap prestasi program? Apakah kesan fungsi C++ terhadap prestasi program? Apr 12, 2024 am 09:39 AM

Kesan fungsi pada prestasi program C++ termasuk overhed panggilan fungsi, pembolehubah tempatan dan overhed peruntukan objek: Overhed panggilan fungsi: termasuk peruntukan bingkai tindanan, pemindahan parameter dan pemindahan kawalan, yang mempunyai kesan ketara pada fungsi kecil. Overhed pembolehubah tempatan dan peruntukan objek: Sebilangan besar pembolehubah tempatan atau penciptaan objek dan pemusnahan boleh menyebabkan limpahan tindanan dan kemerosotan prestasi.

See all articles