c語言之字符指針變量和字符數組的異同


1.字符數組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是地址(字符串第一個字符的地址),而不是將字符串放到字符指針變量中。

2.賦值方式。對字符數組只能對各個元素進行賦值,不能用以下辦法對字符數組進行賦值。

  • char str[20];
  • str = "ni hao a";

   而對於字符指針變量,可以采用以下方式賦值:

  • char *a;
  • a = "ni hao a";

   但需要注意的是賦值給a的不是字符,而是字符串中第一個元素的地址。

3.如果定義了一個字符數組,在編譯時為它分配內存單元,它有確切的地址。而定義一個字符指針變量時,給指針變量分配內存單元,在其中也可以放一個字符變量的地址,也就是說,該指針變量可以指向一個字符型數據,但如果未對它賦予一個地址值,則它並未指向一個確定的字符數據。

4.字符指針實際上是個常量指針,即char* a實際上是const char* a。而常量指針指向的值是不可以更改的,但是它的指向是可以改的,比如說:

#include<stdio.h>
#include<iostream>

int main() {
    char* b;
    b = (char*)"hello";
    //b = "world";這就會報錯,因為它的值不可以更改
    b += 2;//這是對的,b指向了hello中的第二個元素,即llo
    char c[] = "world";
    b = c;//這也是對的,因為b指向了c的首個元素
    printf("%s\n", b);
    system("pause");
    return 0;
}

5.需要注意的是,若定義了一個字符指針變量,並使其指向了一個字符串,也可以用下標的形式引用指針變量所指的字符串中的字符,例如:

#include<stdio.h>
#include<iostream>

int main() {
    char* b;
    b = (char*)"hello";
    printf("%c\n",b[2]);
    system("pause");
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM