形參改變影響實參主要應用在以下幾個方面:
1.用于外部函數要交換主函數中的兩個值,可以用指針來實作,但通過指針來實作主函數中兩個數的交換必須要知道,哪些類型屬于值傳遞,哪些類型屬于位址傳遞,對于值傳遞的那些類型(例如:整形、字元型)才有必要用指針來實作,因為數組,字元串屬于位址傳遞類型,是以沒必要在外部函數通過用指針來實作主函數中的兩個數的交換。舉例:
<a target="_blank" href="http://ask.gongzuohou.cn/data/attach/1307/a1MQt8Zu.png"></a>
2.在開辟空間的時候使用二級指針來實作主函數中指針記憶體的開辟,不然如果不用二級指針的話就必須在外部開辟空間的函數有一個傳回值類型,然後指派給主函數中的指針,如果不通過這兩種方法實作的話就可能引發記憶體問題,舉例:
方法 一、通過在外部開辟空間的函數裡有傳回指針類型,然後指派給主函數中的指針的方法,來實作主函數中指針空間的開辟
<a target="_blank" href="http://ask.gongzuohou.cn/data/attach/1307/1qUv1xGM.png"></a>
方法二、通過二級指針來實作對主函數中指針的指派,所謂二級指針就是指向指針的位址
<a target="_blank" href="http://ask.gongzuohou.cn/data/attach/1307/PyuPW9rI.png"></a>
數組存放的問題
int a[]={2,3,4};
int *p=a;
int *q=&a[0]; //跟第一種情況一樣,都是指向數組第一個元素的首位址
int *k=&a; //将數組a當做整體,如果k++,那就指向末尾了
strcpy标準寫法
//斷言
char * func(cahr *pDest, const char *pBegin)
{
assert(pDest !=NULL && pBegin != NULL); //意思就是如果這兩個有一個為空,就不向下執行,傳回一個message或者提示什麼的
char *pReturn = pDest;
while((*pDest++ == *pBegin != '\0'));
return pReturn;
}
有關指向數組指針的位址問題
#include <stdio.h>
void func(int a[4]) //這兒編譯器不會把它當做數組,隻是會當做指針而已
printf("形參的位元組大小:%d\n",sizeof(a)); //形參數組,編譯器隻會把它當做指針
int main(int argc, const char * argv[])
int a[]={1,2,3,4};
func(a);
int *p=a;
int *k=&a[0];
int *q=&a;
int *j=&a+1;//把a數組當做整體加一,跟上面的q+1不一樣q+1隻是将數組的首位址+1
printf("P,k,q的位址:%d %d %d\n",p,k,q);
printf("數組a的記憶體大小是多少位元組:%d\n",sizeof(a));
printf("++P:%d\n",++p);
printf("++k:%d\n",++k);
printf("&a+1:%d\n",&a+1);
printf("++q:%d\n",++q);
printf("&a+1,将數組作為一個整體+1:%d\n",j);
printf("j+1,将數組作為一個整體+1:%d\n",j);
printf("取出數組的最後一個數:%d\n",*(j-1));
//++的話要看它的偏移是以哪種類型偏移的,char*p,p++,就是以字元型位元組長度為機關長度+1;int *p=&a+1;偏移是以整個數組的位元組長度為機關長度加一
return 0;
運作結果:
形參的位元組大小:8
P,k,q的位址:1606416448 1606416448 1606416448
數組a的記憶體大小是多少位元組:16
++P:1606416452
++k:1606416452
&a+1:1606416464
++q:1606416452
&a+1,将數組作為一個整體+1:1606416464
j+1,将數組作為一個整體+1:1606416464
取出數組的最後一個數:4
int a[]={1,2,3};
int *p=a+1;
printf("%d",a);
printf("\n%d",p);
printf("\n%d",++p);
運作結果:看出來++p跟a+1是等價的,機關長度都是int型的機關長度
1606416332
1606416336
1606416340
擷取目前時間(C語言)
#include <stdio.h>
#include <time.h>
#include <string.h>
int main(int argc, constchar * argv[])
time_t now;
structtm *timenow;
time(&now);
timenow = localtime(&now);
char *p = asctime(timenow);
printf("目前時間是:");
printf(p);
printf("%d",strlen(p));
本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366565,如需轉載請自行聯系原作者