程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我也要學C語言-第十五章:指針與字符串以及鏈式表達式

我也要學C語言-第十五章:指針與字符串以及鏈式表達式

編輯:關於C語言

今天上午,我學完了指針與字符串部分,這部分是通過一些例子加深對指針與字符串的理解。

  我們首先來看1個例子:

#include <stdio.h>

void main(){   

int a[] = {6, 60, 600};   

 int *p = a;   

 *p++;    printf("%d", *p);

}
大家一起分析下,這個程序的結果是什麼?!數組裡面有3個元素,P是指向了數組首地址,然後是*p++,會輸出什麼呢?!嘿嘿!當然輸出60,因為++先結合,++後得到第二個元素的指針,然後取內容輸出60。

如果我們想第一個元素6加1,我們就應該這樣寫:

#include <stdio.h>void main(){    int a[] = {6, 60, 600};    int *p = a;    (*p)++;    printf("%d", *p);}
這個例子主要是鞏固優先級的問題,以及指針和數組關系的問題。

拷貝字符串

請下面這個拷貝字符串的例子:

#include <stdio.h>

void str_cpy(char * pDest, char *pSrc){   

while (*pDest++ = *pSrc++);}void main(){  

  char sz1[32];   

char sz2[] = "Hello world";   

 str_cpy(sz1, sz2);   

printf("%s ", sz1);

}
注意分析,*pSrc++這裡的++是後綴,它是最後加1.最後什麼時候退出while循環的呢?!當然我們知道是左值為0的時候。大家是不是覺得這個拷貝字符串的函數寫得非常的簡潔啊,就1行!嘿嘿!

系統原版拷貝字符串的優勢

  如果我們查詢下系統原版的拷貝字符串它比我們多1個東西,就是它會返回1個char *,我們來看看原版的好在哪裡:

#include<stdio.h>

#include<string.h>

void str_cpy(char * pDest, char *pSrc)

{   

while (*pDest++ = *pSrc++);}void main()

{   

char sz0[32];   

char sz1[32];   

char sz2[] = "Hello world";   

 strcpy(sz0, strcpy(sz1, sz2));   

 printf("%s ", sz0);

}
拷貝其實就是像整型的賦值運算,賦值運算的值等於左值,系統的這個函數返回一個左值。這樣的話,系統的拷貝字符串可以實現鏈式表達式。

  有些朋友說,有點跟不上了,我覺得原因是你沒有調試啦!,如何有點疑惑的地方你就調試分析內存!我通過2周的學習有點以下學習經驗呢,在遇到問題的時候你首先自己調試分析內存去解決問題,不要去看所謂的大師的解釋!,因為大師們大多為了炫耀技術啦!他們的目標是讓不懂的你更加不懂。自己調試分析內存是學習的最快捷徑,因為內存是什麼樣子的,那麼它就是什麼樣子的啦!重要的是相信自己和相信機器。用實踐去證明大師們的理論。脫離了調試與內存分析,盲目的聽從大師的話,會迷失自我。有句話是,要成為大師就需要去模仿大師,但是模仿的東西是大師在還沒有成為大師之前的刻苦的努力,很多東西一調試1下子就會豁然開朗!很多概念的東西,我學1次我根本是不明白的,因為沒有變為我自己的,用調試的方式去學習,你會看到數據真真實實的存在於內存的哪個地方,你會很踏實的啦!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved