C,是一種通用的程式設計語言,它主要用來進行系統程式設計。具有高效、靈活、功能豐富、表達力強和移植性好等的特點,在程式員中備受青睞。
C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)和肯·湯普遜(Ken Thompson)於1970年研製出的B語言的基礎上發展和完善起來的。C語言可以廣泛應用於不同的操作系統,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言是一種面向過程的語言,同時具有高級語言和彙編語言的優點。在C語言的基礎上發展起來的有支持多種程式設計風格的C++語言,網路上廣泛使用的Java、JavaScript,微軟的C#等。
指標(pointer)指针:
C 語言提供了指標資料型態。指標變數 是用來存放變數的位址
(address),是C语言中最有特色的部
分。
指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至当机crush。
初始化的 語法:
int *pA ; /* pA 代表一個指向 整數值 之指標 pA is a pointer to an interger variable */
char *c ; /* c 代表一個指向 字符值 之指標 c is a pointer to a character variable */
float *p ; / * p 是指向 浮点变量 的指针变量 p is pointer to float variable * /

在许多语言中电脑的记忆体位址 你看不到 管不到,但在C语言中 记忆体位址却可用 & 输出,来满足你的好奇心
右图 记忆体位址用16进制表示 0x00f4............0x00f8
int a;
int *pA;
a = 5; /* 如右图 把 5 放入 a 中 */
pA = &a; /* 把 a 的位址(0x00f4)放入 pA 中 */
记忆体位址 0x00f4 会因你的电脑而不同,
右图 %P表示输出用16进制,也可以用%d就会输出10进制
以下几张图只是配合例子而改变记忆体位址编号,事实 记忆体位址是不变的,变的只是 变量variable
#include <stdio.h>
int main(void)
{
int a; /* declare function */
int *pA;
a = 5;
pA = &a;
printf(变数a的值为%d \n", a); /* 输出: 变数a的值为 5 */
printf(变数a的位址为%p \n", &a); /* 输出: 变数a的位址为 0x00f4 */
printf(指针pA的值为%p \n", pA); /* 输出: 指针pA的值为 0x00f4 */
printf(*pA的值为%d \n", *pA); /* 输出: *pA的值为 5 */
return 0 ;
}

#include <stdio.h>
int main(void)
{
int a, b;
int *pA ;
a = 5;
b = 10;
pA = &a; /*变量a 的位址给 pA */
printf("变量a的值为
%d \n",a);
printf("指针pA的值为
%p \n",pA);
printf("*pA的值为 %d \n",*pA);
pA = &b; /*变量b 的位址给 pA */
printf("变量b的值为
%d \n",b);
printf("指针pA的值为
%p \n",pA);
printf("*pA的值为 %d \n",*pA);
return 0;
}
执行结果:
变量a的值为5
指针pA的值为
FFD8
*pA的值为5
变量b的值为10
指针pA的值为
FFDA
*pA的值为10
#include <stdio.h >
void milk(int);
int main(void)
{
int pooh = 2, bah = 5;
printf("In main(), pooh = %d and &pooh = %p\n", pooh, &pooh);
printf("In main(), bah = %d and &bah = %p\n", bah, &bah);
milk(pooh);
return 0;
}
void milk(int bah)
{
int pooh = 10;
printf("In milk(), pooh = %d and &pooh = %p\n", pooh, &pooh);
printf("In milk(), bah = %d and &bah = %p\n", bah, &bah);
}

输出:
In main(), pooh = 2 and &pooh = FFD8
In main(), bah= 5 and &bah = FFDA
In milk(), pooh = 10 and &pooh = FFD0
In milk(), bah = 2 and &bah = FFD6
呼叫 milk(pooh); 确实将 实际引数main的 pooh的 2 传给 milk() 的 bah(形式引数)
但由输出结果 可看出 记忆体位址都不同,虽然同是pooh或都是bah,但在电脑是4个不同变量
Notice: this is pass by value
关於每一函数各有自己的变量,再用以下的例子说明
#include <stdio.h> /* 以下例子出自The Waite Group's New C Primer Plus松岗出版 */
void interchange(int u, int v); /* declare function */
int main(void)
{
int x = 5, y = 10;
printf("Originally x =%d and y = %d.\n", x, y);
interchange(x, y);
printf("Now x = %d and y = %d.\n",x, y);
return 0;
}
/* -------- 交換x y 傳值程序 ------ */
void interchange(int u, int v) /* define function */
{
int temp;
temp = u;
u = v;
v = temp;
}
执行结果:
Originally x = 5 and y = 10.
Now x = 5 and y = 10. /* 结果竟然没换过来 */
让我们在interchange()中加入printf 看看问题出在那里
#include <stdio.h>
void interchange(int u, int v); /* declare function */
int main(void)
{
int x = 5, y = 10;
printf("Originally x =%d and y = %d.\n", x, y);
interchange(x, y);
printf("Now x = %d and y = %d.\n",x, y);
return 0;
}
void interchange(int u, int v) /* define function */
{
int temp;
printf("原来的 u = %d and v = %d.\n", u, v);
temp = u; /* 此變數與 main函數的變數 x y 不同, */
u = v; /* 此interchange函數的變數為local variable */
v = temp; /* local variable 生命週期始于interchange函數開始,結束于interchange函數終點 */
printf("现在 u = %d and v = %d.\n", u, v);
}
执行结果:
Originally x = 5 and y = 10.
原来的 u = 5 and v = 10.
现在 u = 10 and v = 5.
Now x = 5 and y = 10.
每一函数各有自己的变量,interchange()的变量和main()的变量不一样
#include <stdio.h>
void interchange(int *u, int *v);
int main(void)
{
int x = 5, y = 10;
printf("Originally x =%d and y = %d.\n", x, y);
interchange(&x, &y); /* send address to function 傳址 pass by reference */
printf("Now x = %d and y = %d.\n",x, y);
return 0;
}
/* -------- 交換x y 傳址程序 ------ */
void interchange(int *u, int *v)
{
int temp;
/* u的值是&x ,所以 u指向x,因此*u为x的值 */
temp = *u; /* 不要写成temp = u ,这意义就成了:将x的位址给temp,而非x的值 给temp */
*u = *v; /* *u = *v 等於 x = y u = v 等於 &x = &y */
*v = temp;
}
执行结果:
Originally x = 5 and y = 10.
Now x = 10 and y = 5. /* 成功了 */
懂了吗 ?
你已学会 在C语言中 最复杂的部分, 其他的就容易, 你就能满有信心 去完成
Good luck , Go for it............................ maybe take years.
其实学PHP语言 不难 只是付上的代价不是几个月,而是年s
由于C语言中字符常量是按整数(short型)存储的,所以字符常量可以像整数一样在程序中参与相关的运算。例如: 'a'-32;/*执行结果97-32=65*/ 'A'+32;/*执行结果65+32=97*/ '9'-9;/*执行结果57-9=48*/........more
指针变量的类型说明........part I.......part II.......part III
C/C++语言void及void指针深层探索,如果函数没有返回值,那么应声明为void类型.....more
我们知道变量在计算机内是占有一块存贮区域的, 变量的值就存放在这块区 域之中, 在计算机内部, 通过访问或修改这块区域的内容来访问或修改相应的变 量。Turbo C语言中, 对于变量的访问形式之一, 就是先求出变量的地址, 然后 再通过地址对它进行访问, 这就是这里所要论述的指针及其指针变量。 ...........more