1. 程式人生 > >字符串、字符串數組、與一級指針

字符串、字符串數組、與一級指針

\n ++ nbsp 並且 習慣 clas 大於 i++ code

//一級指針的典型用法
//數組 int a[10]
//字符串
//1 C語言的字符串 以零結尾的字符串
//2 在C語言中沒有字符串類型 通過字符數組 來模擬字符串
//3 字符串的內存分配 堆上 棧上 全局區 (很重要)

字符串的初始化

void main()
{

    //1 指定長度  
    char buf2[100] = {a, b, c, d};  
    //1-1 char buf3[2] = {‘a‘, ‘b‘, ‘c‘, ‘d‘}; //如果初始化的個數大於內存的個數 編譯錯誤
    //1-2 //後面的buf2[4]-buf2[99] 0


    //2 不指定長度  C編譯器會自動幫程序員 求元素的個數
char buf1[] = {a, b, c, d}; //buf1是一個數組 不是一個以0結尾的字符串 printf("buf2: %s \n", buf2); printf("buf2[88]:%d \n", buf2[88]); printf("hello....\n"); system("pause"); return ; }

//下面要是面試題可別錯
//用字符串 來 初始化字符數組
//strlen() 長度 不包括0
//sizeof() 內存塊的大小
void main52()
{
    int size = 0;
    
char buf3[] = "abcd"; // buf3 作為字符數組 應該是5個字節 //作為字符串 應該4個字節 int len = strlen(buf3); printf("buf3字符的長度:%d \n", len); //4 //buf3 作為數組 數組是一種數據類型 本質(固定小大內存塊的別名) size = sizeof(buf3); // printf("buf3數組所占內存空間大小:%d \n", size); //5 printf("hello....\n"); { char buf4[128] = "abcd"; //
buf printf("buf4[100]:%d \n", buf4[100]); } system("pause"); return ; }

//通過數組下標 和 指針

void main58()
{
    int        i = 0;
    char    *p = NULL;
    char buf5[128] = "abcdefg"; // buf

    for (i=0; i<strlen(buf5); i++)
    {
        printf("%c ", buf5[i]); 
    }
    
    p = buf5; //buf 代表數組首元素的地址

    for (i=0; i<strlen(buf5); i++)
    {
        p = p +i;
        //*(p+i)
        printf("%c ", *p ) ;
    }

    //buf
    for (i=0; i<strlen(buf5); i++)
    {
        printf("%c ", *(buf5+i) ) ;
    }

    //[] *的推導過程
    // buf5[i] ===> buf5[0+i]; ==> *(buf5+i);

    {
        //buf5 = buf5 + 1;
        //buf5 = 0x11;
    }
    printf("hello....\n");
    system("pause");
}

// []的本質 :和*p 是一樣 ,只不過是符合程序員的閱讀習慣
// buf5 是一個指針,  只讀的常量  buf5是一個常量指針  析構內存的時候,保證buf所指向的內存空間安全釋放
//為什麽這麽做?

//p普通指針和內存首地址區別

//一級指針的內存模型
void main61()
{
    char buf[20]= "aaaa"; //定義並且初始化
    char buf2[] = "bbbb";
    char *p1 = "111111";
    char *p2 = malloc(100); 
    strcpy(p2, "3333");

    system("pause");
    return ;
}

技術分享圖片

//字符串技術推演
void copy_str(char *from, char *to)
{
    for (; *from != \0; from++, to++)
    {
        *to = *from;
    }
    *to = \0;
    return ;
}

void main()
{
    char *from = "abcd";
    char buf[100];
    copy_str(from, buf);
    printf("buff:%s\n", buf);

    system("pause");

}

技術分享圖片

字符串、字符串數組、與一級指針