|
C語言快速入門系列(七) C語言快速入門系列(七) C語言指針進階 本章引言: 在前面第5節(jié)中我們對C語言的指針進行了初步的學(xué)習(xí)理解;作為C語言的靈魂, C指針肯定沒那么簡單,在這一節(jié)中,我們將會對指針進行進一步的學(xué)習(xí),比如二級指針, 指針數(shù)組,內(nèi)存分配和const修飾指針常量等!下面就請大家跟隨筆者的腳步,對 C指針神秘的一面進行進一步的解析吧! 本節(jié)學(xué)習(xí)路線圖:
函數(shù)與指針:①指針作為函數(shù)的形參:
②指向函數(shù)的指針:
③指針函數(shù):
④帶參數(shù)的主函數(shù)
ps:該代碼的運行:先要編譯生成exe文件后,來到exe所在文件目錄下:輸入: 文件名 one two three 會輸出:one two three 指針數(shù)組:兩個問題:如何保存一個字符串?如果保存的不止一個,而是多個呢? 第一個問題: ①char name[20] = "~~~" ②char *name = "~~~" //前者定義了長度,不能直接賦值,明顯后者比較靈活 第二個問題:見圖
二級指針:
內(nèi)存的動態(tài)分配:
代碼示例: 動態(tài)分配10個整型的空間大小,如果大于這個數(shù)目則動態(tài)分配,否則利用realloc重新分配內(nèi)存 ps:代碼沒問題,vc6一直報運行時錯誤,如果出錯了,用C-Free或者Visual studio等編譯器試試! <span style="font-family:Microsoft YaHei;">#include <stdio.h>
#include <stdlib.h>
#define N 10
int main()
{
int *p = 0;
int i,num,*q = 0;
p = (int *)malloc((N * sizeof(int)));
if(p == 0)
{
printf("內(nèi)存分配錯誤!\n");
exit(0);
}
printf("請輸入要存儲的元素個數(shù):\n");
scanf("%d",&num);
if(num <= N)
{
for(i = 0;i < N;i++)
scanf("%d",p+i);
}
else
{
for(i = 0;i < num;i++)
q = (int *)realloc(p,(N + N)*sizeof(int));
if(q == 0)exit(0);
for(i = 0;i < num;i++)
scanf("%d",q + i);
p = q;
}
for(i = 0;i < num;i++)
printf("%3d",*(p+i));
printf("\n");
free(p);
return 0;
}</span>
使用const修飾指針變量我們都知道使用const修飾一個基本數(shù)據(jù)類型的變量,可以讓變量存儲的值從頭到尾都不變 我們的程序不能進行修改!不過修飾指針變量就有點差異了: 比如: int a = 3,b = 4; const int *p = &a; 如果我們再添加一句代碼: p = &b;的話就會報錯 如果添加: a = 5;代碼并不出錯,此時 *p == a == 5; 分析結(jié)果: 使用const修飾指針時,表明該指針是一個常量指針,它所指向的變量的值是可以修改的; 但是修改指針指向的地址則是錯誤的?。。?/span> 在C許多的標(biāo)準庫函數(shù)都將某些指針參數(shù)的類型前加上const,目的是保護參數(shù)! ps:int *const p = &a; const int * const p = &a; 和上面的都是等價的! 本章小結(jié):①函數(shù)與指針: 1.指針作為函數(shù)的形參: 指針參數(shù)對應(yīng)的實參需要為變量地址 2.指向函數(shù)的指針:函數(shù)的首地址稱為函數(shù)的指針,通過函數(shù)名可以找到并且執(zhí)行函數(shù) 3.指針函數(shù):返回值類型是一個指針 4.帶參數(shù)的主函數(shù): int main(int argc,char *argv[]) :形參依次為:記錄參數(shù)個數(shù)和存儲參數(shù)內(nèi)容的字符串?dāng)?shù)組 ②指針數(shù)組 二維數(shù)組存放字符串與指針數(shù)組存放字符串的比較 ③二級指針 指向指針變量的指針 ④內(nèi)存的動態(tài)分配: 1.內(nèi)存分配圖 2.C語言提供的四個內(nèi)存分配函數(shù)的使用:malloc(),calloc(),realloc(),free()的使用 ⑤使用const修飾指針變量 可以修改的指向地址的變量的值,不能修改的是指針?biāo)赶虻牡刂? |
|
|