程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 指針的理解 -

指針的理解 -

編輯:關於C語言

     這兩個星期內都是在忙公司的事情,所以沒有什麼時間看C語言,OK,這幾天,自己就發現了C語言中指針這個東西,以前看書覺得就只不過是一4個字節的,用於存放了某對象的地址而已,同時可以用這個地址加加減減.....但經過這一個過程後,發覺其實C語言java真的很多都不相同,以下就說一下關於這個指針自己的一點實踐經驗吧,歡迎向我這個菜鳥多提建議....        其實就這樣的,從字符串對象A復制字符到字符串對象B,就是這樣簡單.先給程序   #include <stdio.h>
#include <stdlib.h>
#include <string.h>   char* copy_1(const char*,char*);
void copy_2(const char*,char*);   int main()
{
        char* c = "hello google!!";
        int len = strlen(c) + 1;
        char* t = (char*)malloc(len);         if(NULL)         //這個開關用於測試不同的方法
        {
                t = copy_1(c,t);
                printf("copy_1:\tbefor:%s\tafter copy:%s\n",c,t);
        }else{
                copy_2(c,t);
                printf("copy_2:\tbefor:%s\tafter copy:%s\n",c,t);
        }
        free(t);         return 0;
} // 復制字符串的方法 1 char* copy_1(const char* in,char* out)
{
        if(in == NULL | out == NULL)
        {
                return;
        }         char *t = out;            // A
        while((*out++=*in++)!='\0');
        *(++out)='\0';
        return t;
} //復制字符串的方法 2 void copy_2(const char* in,char* out)
{
        if(in == NULL || out == NULL)
        {
                return;
        }         int len = 0;
        while((*out++=*in++)!='\0')
        {
                len++;
        }
        *(++out)='\0';         for(;len>0;len--)    \\ B  
        {
                out--;
        }
}   先看方法_1        目的很簡單,從字符對象指針 c 復制到對象指針t 我覺得這種方法比較符合java的方法使用,傳一個對象進去,然後返回另一個對象 但是不知道大家有沒有發覺這個 copy_1方法中的 \\A 的地方,在把傳進來的對象out 在復制前先再定義多一個指向這個out對象的指針,同時返回的也是這一個指針,但沒有返回參與復制過程的out對象,就這樣看,似乎多此一舉,但後面你就會慢慢了解了.   再方法_2        目的一樣,都是字符串復制,但是這個方法,明顯看來象C語言的方法風格了 把一個的字符對象傳進來,然後在方法裡進行復制操作,OK在復制完後,應該可以直接 返回了,因為字符復制已經完成了,但是,留意一個方法2的 \\B 那裡,又進行了一個加加減減的操作,把 out 對象的指針退回了字符的長度,就象一個數組那樣,游標回到數組的第一位了,這樣就明白了為什麼第一個方法它再定義一個對象指定,然後再操作了.   總結,說明了指定不僅僅是一個保存了一對象的地址的4個字節的東西,同時它還保存了指向對象的游標位移.大家可以試一下,如果直接不要方法2的 \\B的那一個循環,看看輸出的結果是什麼..可以這樣說..肯定出錯的...當時 \\B的加入都是自己在想這個指針問題的時候,突發奇想而已....還望各位高手向小弟多提意見.... 開源中國

本文出自 “起跑人生,追逐夢想,超..” 博客,請務必保留此出處http://kernaling.blog.51cto.com/654553/218138

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