這兩個星期內都是在忙公司的事情,所以沒有什麼時間看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