c語言指針教學
❶ c語言指針怎麼用
在c語言中.指針被用來表示內存單元的地址,如果把這個地址用一個變數來保存,則
這種變數就稱為指針變數。指針變數也分別有不同的類型,用來保存不同類型變數的地址。
嚴格地說.指針與指針變數是不同的,為了敘述方便,常常把指針變數就稱為指針。
內存是計算機用於存儲數據的存儲器,以位元組作為存儲單元.為了能正確的訪問內存單
元,必須為每一個內存單元編號,這個編號就稱為該單元的地址。如果將一個旅店比喻成內
存,則旅店的房間就是內存單元,房間號碼就是該單元的地址。
指針變數定義格式:
[存儲類型]
數據類型
*指針變數名[=初始值]
指針變數一旦定義,必須採用賦值的方式將其與某個變數實體相聯系,才能使用。指針
變數的賦值方式:
指針變數名;&普通變數名;
❷ c語言中指針怎麼用
c語言之所以強大,以及其自由性,很大部分體現在其靈活的指針運用上。因此,說指針是c語言的靈魂,一點都不為過。指針就是地址。
計算機中的內存都是編址的,就像你家的地址一樣。
C 中函數調用是按值傳遞的,傳入參數在子函數中只是一個初值相等的副本,無法對傳入參數作任何改動。但實際編程中,經常要改動傳入參數的值。這一點我們可以用傳入參數的地址(也就是指針)而不是原參數本身,當對傳入參數(地址)取(*)運算時,就可以直接在內存中修改,從而改動原想作為傳入參數的參數值。
例如:
#include <stdio.h>
void inc(int *val)
{
(*val)++;
}
main()
{
int a=3;
inc(&a); //傳a的地址
printf("%d" , a);
}
❸ C語言的指針怎麼用啊
在你提供的代碼上進行了增加,我感覺你們老師可能是想讓你們把指針用在數組上吧,對於一個指向數組的指針p,p++指向數組的下一個元素。此外,使用指針可以很好的提升代碼執行效率。有問題可以互相交流。
#include <stdio.h>
#include <stdlib.h>
int square(int a, int b)
{
return a*b;
}
int main()
{
int i, j, l, w, s = 0, number = 1, max;
int *length = &l, *width = &w, *p = &i;
printf("請輸入您所需測量田地的數量: \n");
scanf("%d",p);
int a[*p];
int *y = a;
for(j = 0; j < *p; j++)
{
printf("請輸入第%d塊田的長和寬: \n", j+1);
scanf("%d %d",length,width);
*(y+j) = square(*length, *width);
s = s + *(y+j);
max = *y;
if( *(y+j) > max)
{
max = *(y+j) ;
number = j+1;
}
}
for(j = 0; j < *p; j++)
{
printf("您第%d塊田的面積為%d:\n",j+1,*(y+j));
}
printf("您的田地總面積為: %d \n", s);
printf("您最大面積一塊第為第%d塊,面積為%d !!!", number, max);
return 0;
}
❹ c語言指針簡單教程
指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變數可以表示各種數據結構; 能很方便地使用數組和字元串; 並能象匯編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。 學習指針是學習C語言中最重要的一環, 能否正確理解和使用指針是我們是否掌握C語言的一個標志。同時, 指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。
指針的基本概念 在計算機中,所有的數據都是存放在存儲器中的。 一般把存儲器中的一個位元組稱為一個內存單元, 不同的數據類型所佔用的內存單元數不等,如整型量佔2個單元,字元量佔1個單元等, 在第二章中已有詳細的介紹。為了正確地訪問這些內存單元, 必須為每個內存單元編上號。 根據一個內存單元的編號即可准確地找到該內存單元。內存單元的編號也叫做地址。 既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。 內存單元的指針和內存單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關系。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這里,帳號就是存單的指針, 存款數是存單的內容。對於一個內存單元來說,單元的地址即為指針, 其中存放的數據才是該單元的內容。在C語言中, 允許用一個變數來存放指針,這種變數稱為指針變數。因此, 一個指針變數的值就是某個內存單元的地址或稱為某內存單元的指針。圖中,設有字元變數C,其內容為「K」(ASCII碼為十進制數 75),C佔用了011A號單元(地址用十六進數表示)。設有指針變數P,內容為011A, 這種情況我們稱為P指向變數C,或說P是指向變數C的指針。 嚴格地說,一個指針是一個地址, 是一個常量。而一個指針變數卻可以被賦予不同的指針值,是變。 但在常把指針變數簡稱為指針。為了避免混淆,我們中約定:「指針」是指地址, 是常量,「指針變數」是指取值為地址的變數。 定義指針的目的是為了通過指針去訪問內存單元。
既然指針變數的值是一個地址, 那麼這個地址不僅可以是變數的地址, 也可以是其它數據結構的地址。在一個指針變數中存放一
個數組或一個函數的首地址有何意義呢? 因為數組或函數都是連續存放的。通過訪問指針變數取得了數組或函數的首地址, 也就找到了該數組或函數。這樣一來, 凡是出現數組,函數的地方都可以用一個指針變數來表示, 只要該指針變數中賦予數組或函數的首地址即可。這樣做, 將會使程序的概念十分清楚,程序本身也精練,高效。在C語言中, 一種數據類型或數據結構往往都佔有一組連續的內存單元。 用「地址」這個概念並不能很好地描述一種數據類型或數據結構, 而「指針」雖然實際上也是一個地址,但它卻是一個數據結構的首地址, 它是「指向」一個數據結構的,因而概念更為清楚,表示更為明確。 這也是引入「指針」概念的一個重要原因。
指針變數的類型說明
對指針變數的類型說明包括三個內容:
(1)指針類型說明,即定義變數為一個指針變數;
(2)指針變數名;
(3)變數值(指針)所指向的變數的數據類型。
其一般形式為: 類型說明符 *變數名;
其中,*表示這是一個指針變數,變數名即為定義的指針變數名,類型說明符表示本指針變數所指向的變數的數據類型。
例如: int *p1;表示p1是一個指針變數,它的值是某個整型變數的地址。 或者說p1指向一個整型變數。至於p1究竟指向哪一個整型變數, 應由向p1賦予的地址來決定。
再如:
staic int *p2; /*p2是指向靜態整型變數的指針變數*/
float *p3; /*p3是指向浮點變數的指針變數*/
char *p4; /*p4是指向字元變數的指針變數*/ 應該注意的是,一個指針變數只能指向同類型的變數,如P3 只能指向浮點變數,不能時而指向一個浮點變數, 時而又指向一個字元變數。
指針變數的賦值
指針變數同普通變數一樣,使用之前不僅要定義說明, 而且必須賦予具體的值。未經賦值的指針變數不能使用, 否則將造成系統混亂,甚至死機。指針變數的賦值只能賦予地址, 決不能賦予任何其它數據,否則將引起錯誤。在C語言中, 變數的地址是由編譯系統分配的,對用戶完全透明,用戶不知道變數的具體地址。 C語言中提供了地址運算符&來表示變數的地址。其一般形式為: & 變數名; 如&a變示變數a的地址,&b表示變數b的地址。 變數本身必須預先說明。設有指向整型變數的指針變數p,如要把整型變數a 的地址賦予p可以有以下兩種方式:
(1)指針變數初始化的方法 int a;
int *p=&a;
(2)賦值語句的方法 int a;
int *p;
p=&a;
不允許把一個數賦予指針變數,故下面的賦值是錯誤的: int *p;p=1000; 被賦值的指針變數前不能再加「*」說明符,如寫為*p=&a 也是錯誤的
指針變數的運算
指針變數可以進行某些運算,但其運算的種類是有限的。 它只能進行賦值運算和部分算術運算及關系運算。
1.指針運算符
(1)取地址運算符&
取地址運算符&是單目運算符,其結合性為自右至左,其功能是取變數的地址。在scanf函數及前面介紹指針變數賦值中,我們已經了解並使用了&運算符。
(2)取內容運算符*
取內容運算符*是單目運算符,其結合性為自右至左,用來表示指針變數所指的變數。在*運算符之後跟的變數必須是指針變數。需要注意的是指針運算符*和指針變數說明中的指針說明符* 不是一回事。在指針變數說明中,「*」是類型說明符,表示其後的變數是指針類型。而表達式中出現的「*」則是一個運算符用以表示指針變數所指的變數。
main(){
int a=5,*p=&a;
printf ("%d",*p);
}
......
表示指針變數p取得了整型變數a的地址。本語句表示輸出變數a的值。
2.指針變數的運算
(1)賦值運算
指針變數的賦值運算有以下幾種形式:
①指針變數初始化賦值,前面已作介紹。
②把一個變數的地址賦予指向相同數據類型的指針變數。例如:
int a,*pa;
pa=&a; /*把整型變數a的地址賦予整型指針變數pa*/
③把一個指針變數的值賦予指向相同類型變數的另一個指針變數。如:
int a,*pa=&a,*pb;
pb=pa; /*把a的地址賦予指針變數pb*/
由於pa,pb均為指向整型變數的指針變數,因此可以相互賦值。
④把數組的首地址賦予指向數組的指針變數。
例如: int a[5],*pa;
pa=a; (數組名表示數組的首地址,故可賦予指向數組的指針變數pa)
也可寫為:
pa=&a[0]; /*數組第一個元素的地址也是整個數組的首地址,
也可賦予pa*/
當然也可採取初始化賦值的方法:
int a[5],*pa=a;
⑤把字元串的首地址賦予指向字元類型的指針變數。例如: char *pc;pc="c language";或用初始化賦值的方法寫為: char *pc="C Language"; 這里應說明的是並不是把整個字元串裝入指針變數, 而是把存放該字元串的字元數組的首地址裝入指針變數。 在後面還將詳細介紹。
⑥把函數的入口地址賦予指向函數的指針變數。例如: int (*pf)();pf=f; /*f為函數名*/
(2)加減算術運算
對於指向數組的指針變數,可以加上或減去一個整數n。設pa是指向數組a的指針變數,則pa+n,pa-n,pa++,++pa,pa--,--pa 運算都是合法的。指針變數加或減一個整數n的意義是把指針指向的當前位置(指向某數組元素)向前或向後移動n個位置。應該注意,數組指針變數向前或向後移動一個位置和地址加1或減1 在概念上是不同的。因為數組可以有不同的類型, 各種類型的數組元素所佔的位元組長度是不同的。如指針變數加1,即向後移動1 個位置表示指針變數指向下一個數據元素的首地址。而不是在原地址基礎上加1。
例如:
int a[5],*pa;
pa=a; /*pa指向數組a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值為&pa[2]*/ 指針變數的加減運算只能對數組指針變數進行, 對指向其它類型變數的指針變數作加減運算是毫無意義的。(3)兩個指針變數之間的運算只有指向同一數組的兩個指針變數之間才能進行運算, 否則運算毫無意義。
①兩指針變數相減
兩指針變數相減所得之差是兩個指針所指數組元素之間相差的元素個數。實際上是兩個指針值(地址) 相減之差再除以該數組元素的長度(位元組數)。例如pf1和pf2 是指向同一浮點數組的兩個指針變數,設pf1的值為2010H,pf2的值為2000H,而浮點數組每個元素佔4個位元組,所以pf1-pf2的結果為(2000H-2010H)/4=4,表示pf1和 pf2之間相差4個元素。兩個指針變數不能進行加法運算。 例如, pf1+pf2是什麼意思呢?毫無實際意義。
②兩指針變數進行關系運算
指向同一數組的兩指針變數進行關系運算可表示它們所指數組元素之間的關系。例如:
pf1==pf2表示pf1和pf2指向同一數組元素
pf1>pf2表示pf1處於高地址位置
pf1<pf2表示pf2處於低地址位置
main(){
int a=10,b=20,s,t,*pa,*pb;
pa=&a;
pb=&b;
s=*pa+*pb;
t=*pa**pb;
printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);
printf("s=%d\nt=%d\n",s,t);
}
......
說明pa,pb為整型指針變數
給指針變數pa賦值,pa指向變數a。
給指針變數pb賦值,pb指向變數b。
本行的意義是求a+b之和,(*pa就是a,*pb就是b)。
本行是求a*b之積。
輸出結果。
輸出結果。
......
指針變數還可以與0比較。設p為指針變數,則p==0表明p是空指針,它不指向任何變數;p!=0表示p不是空指針。空指針是由對指針變數賦予0值而得到的。例如: #define NULL 0int *p=NULL; 對指針變數賦0值和不賦值是不同的。指針變數未賦值時,可以是任意值,是不能使用的。否則將造成意外錯誤。而指針變數賦0值後,則可以使用,只是它不指向具體的變數而已。
main(){
int a,b,c,*pmax,*pmin;
printf("input three numbers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b){
pmax=&a;
pmin=&b;}
else{
pmax=&b;
pmin=&a;}
if(c>*pmax) pmax=&c;
if(c<*pmin) pmin=&c;
printf("max=%d\nmin=%d\n",*pmax,*pmin);
}
......
pmax,pmin為整型指針變數。
輸入提示。
輸入三個數字。
如果第一個數字大於第二個數字...
指針變數賦值
指針變數賦值
指針變數賦值
指針變數賦值
判斷並賦值
判斷並賦值
輸出結果
......
❺ C語言 指針方法
#include<stdio.h>
int main()
{
int a,b,c,s[3],t;
int *x,*y,*z;//定義指針變數
x=&a;//將a的地址賦給指針x,下同
y=&b;
z=&c;
scanf("%d%d%d",x,y,z);
s[0]=*x;//將指針x所指向的變數值賦給數組s的第一個元素;依次類推
s[1]=*y;
s[2]=*z;
for(int i=0;i<3;i++)//冒泡排序
for(int j=0;j<3-i-1;j++)
if(s[j]<s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
for(int i=0;i<3;i++)
printf("%d ",s[i]);
return 0;
}
❻ c語言中指針怎麼使用
1、使用場景
使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a數組首地址
//*b=2; 無法直接初始化
//printf("%d ", *b);
e=e+2; //移動兩個地址單元
d=&c; //d指向c的地址來表示值
c=4; //修改原c變數的值,d指針的值會發生改變
b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲值
*b=2;//分配空間後可以直接賦值了
printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);
2、類型說明
(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元
(2)char *b:表示一個指向char變數的指針
*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p ",*a,*(a+1),a);
(6)c語言指針教學擴展閱讀:
指針的運算
指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算
(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d ",*a);
結果輸出2。
參考資料來源 :指針-網路
❼ C語言中如何用指針變數的方法來實現1輸入的十個數的逆序輸出啊、哪位大蝦解答下感激不盡!!!
用C語言指針實現字元串逆序及迴文串的判定
口裴曉英
(新疆兵團高等專科學校新疆·鳥魯木齊831300)
摘要:字元串逆序輸出是C語言經典演算法之一,過去利用數組下標處理此類問題,較為繁瑣,本文給出
了利用指針實現任意給定字元串的逆序輸出方法,以及在此基礎上進行迴文字元串判斷的便捷方法。
關鍵詞:C語言指針字元串逆序演算法迴文
中圖分類號:TP39 文獻標識碼:A 文章編號:1007-3973(2008 1 12-071.Ol
『C語言中,實現任意給定字元串的逆序輸出,是一道經
典常用演算法,掌握此類演算法,對於提高運用字元串能力及編
程綜合能力都有很大的幫助。對於C語言字元串的處理,人
們慣常使用的是數組下標的方法,不僅效率低,而且估算下
標容易出錯,准確率低,最為致命的還是下標一旦越界,會
出現亂碼甚至程序崩潰。筆者經過試驗、總結,提煉出用指
針實現字元串逆序輸出的簡便方法,並且在此基礎上,應用
此類方法,我們可以方便快捷的解決同類的字元串處理問
題,例如迴文的判斷,本文也給出了相應實現辦法.
1問題
(1)對於任意給定的字元串,進行倒置,列印輸出該串
為原串的逆序。例如輸入為「tomo玎ow」。則其存儲和輸出
即為「worromot」。
(2)判斷任意給定字元串是否迴文,輸出相應提示信
息。
所謂「迴文串」,即一個字元串正序讀和逆序讀時都
一樣,如「level」或者「noon」等等就是迴文串。
2演算法思路
問題1)將一個給定字元串逆序存儲
定義一個足夠大的字元數組,用於存儲用戶輸入的任
意字元串。再定義兩個字元指針,分別指向字元串的頭部和
尾部,交換兩指針指向的字元,交換後兩指針分別後移和前
移,循環交換對應位置的字元,直到兩指針在中點相遇,則
整個串實現了與原串的逆序存儲。
問題2)迴文的判定:類似問題1)的處理方法,我們首
先定義一個足夠大的字元數組,用於存儲用戶輸入的任意
字元串。再定義兩個字元指針,分別指向字元串的頭部和尾
部,兩指針分別後移和前移,依次判斷對應位置的字元是否
相同,一旦不相同即退出循環,說明不是迴文串,若一直相
同,直到兩指針在中點相遇,則整個串是迴文串,輸出相應
信息。
問題I)和問題2)的核心演算法,都是對對應位置的字
符進行比較判斷,故我們都採用指針的方法可以很方便的
解決這兩類問題。
3演算法實現
對比:用數組下標的方式判定迴文的演算法實現(結合指
針的運用):
#include「stdio.h」
#include「string.h」
int mmnO
{ ,
char sn-[50J,』p;
im i;
printf(「請輸入字元串婦」);
scanq」%s」,s∞;
P-s也
t/把指針移動到字元串的末尾
礦礦strlen(str)-I;
for(i=O;i<(int)strlen(str);i++,p..)
{
if(+p!fstr[i])
{
printff」這個字元串不是迴文、Il」);
return l;
}
'
printff」這個字元串是迴文、ll」);
return O:
}
對比:用堆棧的方式判定迴文的演算法實現:
#include<stdio.h>
#define S1'ACK INIT SIZE loo
#dcfine STACK INCltEⅣ【ENT lO
typcdef struct
{
char+base;
char『top;
int stacksizc;
}SqStack;
int InitStack(SqStack『S)
{
S->base=(char+)malIoc(STACK—INIT—SIZE+
sizeof(char)):
if(!S->base)
rg:t1.1nl 0:
S->top=S->basc;
S->s。tacksizc;STACK_INIT-sIZE;
rgturn l:
)
int凈0:
intj=O;
char str[20],str2120];
斟m論丘·2008年第12期I下)
萬方數據
戇黍熬j纛竇鬻鬃
基於SolidWorks拉深模三維CAD系統的研究
口張俊
(宿遷學院機電工程系江蘇·宿遷223800)
摘要:本文簡要介紹了開發拉深模具三維CAD系統的整體過程,並以凹模為例,詳細闡述了模具各零部
件的三維設計步驟,並給出了凹模設計的方法和開發程序。
關鍵詞:拉深模SolidWorks vB
中圖分類號:TP39 文獻標識碼:A 文章編號:1007.3973 I 2008)12-072·02
筒形件拉深模具在汽車、拖拉機、飛機、鍾表、電器和儀
表中得到了廣泛應用,市場前景良好。目前,三維筒形件拉
深模CAD系統的研究和開發較為滯後,三維系統的開發迫
在眉睫,本研究對於促進模具三維軟體的開發、提高模具設
計質量和生產效率、推進模具行業的快速成型技術和促進
製造業的全面發展,均具有重要的研究價值。
本系統採用Windows XP為操作系統、Visual Basic 6.0
為編程工具、SolidWorks 2006為圖形處理軟體、Microsoft
Access 2003為資料庫管理系統。
1系統的需求分析
拉深模CAD系統的任務就是要使設計人員可以快速、
輕松查閱數據和表格,降低對設計人員經驗的依賴性,輔助
設計人員進行決策,減輕設計人員繪圖勞動,使拉深模設計
更輕松,實現三維造型設計,提高模具質量和設計效率。
筒形件拉深模CAD系統是一個比較復雜的系統,採用
結構化分析方法可簡化系統的難度,准確表達用戶需求,確
保軟體開發成功。系統的詳細數據流圖如圖l所示.
:£媚『嬙牲0 ,瓤§
圖1拉深模CAD系統詳細數據流圖
2系統結構的設計
本系統由六大模塊構成:主控程序、產品信息輸入模
塊、工藝計算分析模塊、模具設計與計算模塊、模具三維圖
生成模塊及專用資料庫和圖形庫。
(1)主控程序
主控程序即程序管理程序,對各模塊進行綜合管理,用
戶通過此界面進入模具的其它各個模塊,並對其進行操作。
(2)零件信息輸入模塊
零件信息輸入模塊將拉深件的幾何尺寸和精度、材料
和工藝條件等信息輸入到計算機內,並存入資料庫中,為後
續設計提供拉深件的產品信息。
(3)工藝分析與計算模塊
工藝分析與計算模塊主要對零件的各個參數進行工藝
分析,判斷參數是否符合工藝條件,並確定工藝參數。計算
出毛坯尺寸,判斷是否能一次拉深成形,計算拉深次數、拉
深系數、各工序的半成品尺寸、壓邊力、拉深力、拉深功,並
將上述信息存入資料庫中,為模具設計打下良好基礎。
(4)模具設計與計算模塊
模具計算過程包括計算凸、凹模尺寸、圓角半徑,計算
零部件尺寸等。設計過程包括確定模具結構類型的選擇、工
作部件的設計、輔助零件的設計及模架、標准件的選擇。
(5)模具三維圖生成模塊
在三維繪圖環境下,利用CAD軟體生成模具零部件的
三維實體模型,最後在此基礎上裝配成該模具的裝配體,為
用戶的下一步工作(如生成二維工程圖、CAD/CAM的集成
等)做准備。以凹模為例,介紹其開發過程。
SqStack s;
InitStack(&s);
prinff(」請輸入一個任意字元串:ha」);
scanf(」‰」.stO;
forCi<strlcn(str);i++)
Push(&s,s仃【i1);
forCj<stricn(str);j++)
Pop(&s,&str20】);
if(strcmp(str,str2)一O)
pri.tf【」是迴文串ha」);
clsc
prin氓」不是迴文串、II」);
}
4結束語
將給定字元串逆序存儲以及判斷一個給定字元串是否
是迴文,這兩類問題,核心演算法都是相同的,我們通過熟練
運用指針,可以方便靈活的予以解決,對比給出的數組及堆
棧的處理方法,指針解決方法簡潔明了,易懂易用,易於移
植和擴展到相關字元串問題中,便於觸類旁通、舉一反三。
參考文獻:
[1]譚浩強.C程序設計(第二版)[H].清華大學出版
社,2005.
[2]顧曉燕.C語言中指針和指針教學[J].福建電腦.2008年
(01).
[3]吳瓊.陳新文.關於指針數組與指向指針的指針教學研
究[J].電腦開發於應用,2007年(總702).
斟協論lij·2008年第12期(下l
萬方數據
用C語言指針實現字元串逆序及迴文串的判定
作者: 裴曉英
作者單位: 新疆兵團高等專科學校,新疆·烏魯木齊,831300
刊名:
科協論壇(下半月)
英文刊名: SCIENCE & TECHNOLOGY ASSOCIATION FORUM
年,卷(期): 2008,""(12)
被引用次數: 0次
參考文獻(3條)
1.譚浩強C程序設計 2005
2.顧曉燕C語言中指針和指針教學[期刊論文]-福建電腦 2008(01)
3.吳瓊.陳新文關於指針數組與指向指針的指針教學研究[期刊論文]-電腦開發與應用 2007(總702)
相似文獻(10條)
1.期刊論文吳瓊.WU Qiong C語言指針教學方法研究 -鄂州大學學報2009,16(2)
指針是C語言的精華和重要特色,理解指針的概念應從計算機存儲系統硬體結構入手,它是C語言學習的重點和難點,數組也是C語言學習的重點和難點
,針對指針數組與指向指針的指針這一教學難點.該文用圖示方法將復雜的概念形象地表示出來,用對比方法闡釋比較容易混淆的概念,通過簡單實用的程
序對比分析二者的應用,揭示它們的區別與編程意義.
2.期刊論文王恆濱.閆東升關於C語言指針定義的討論 -遼寧財專學報2004,6(2)
在教學和實踐中發現,C語言指針定義的信息量不足,難於解釋指針使用的許多方面.本文大膽地剖析了已有的定義,從中找出問題所在,並試圖加以改
進.還結合實例給出了"擬構"概念,較好地說明了相關知識尤其是指針與數組的關系.
3.期刊論文李忠武.Li Zhong-wu C語言指針探討 -保山師專學報2005,24(2)
結合實例從五個方面對C語言指針進行分析和探討:闡述C語言指針的概念和正確使用指針變數,區分指針變數和指針的指向變數的含義和用法;通過判
斷變數與運算符*、[]和()的結合順序來確定變數的數據類型及指向變數或成員變數的類型;指出指針與數組的關系,通過指針來訪問數組元素和採用下標
法數組元素的等價關系;作為函數參數的指針變數,可以改變所指向的主調函數變數的值;指針可以實現動態存儲分配,用來實現對鏈表的創建、插入和刪
除等操作.
4.期刊論文婁浩韜 C語言指針研究 -矽谷2008,""(2)
指針是C語言的精華,拋開指針的C語言是沒有生命力的.我們認為深入理解指針的本質含義,對指針進行理性分析和研究將有助於我們進一步加深對
C語言程序編程的認識和應用.
5.期刊論文陳建輝 C語言指針探討 -莆田高等專科學校學報2001,8(4)
結合實例從五個方面對C語言指針進行分析和探討:闡述C語言指針的概念和正確使用指針變數,區分指針變數和指針的指向變數的含義和用法;通過判
斷變數與運算符*,[]和()的結合順序來確定變數的數據類型及指向變數或成員變數的類型;指出指針與數組的關系,通過指針來訪問教組元素和採用下標
法數組元素的等價關系;作為函數參數的指針變數,可以改變所指向的主調函數變數的值;指針可以實現動態存儲分配,用來實現對鏈表的創建、插入和刪
除等操作.
6.期刊論文深入理解C語言指針 -內江科技2005,""(6)
指針是C語言的精華和核心部分,充分體現了C語言的靈活性,增強了C語言的功能.本文從指針的定義、指針的功能及由於指針的使用帶來的安全性等
方面深入地分析了C語言的指針.
7.期刊論文鄧滿英.DENG Man-Ying 淺析C語言指針 -襄樊職業技術學院學報2010,9(1)
C語言功能豐富、使用靈活方便,主要體現在其指針靈活且無所不指上.指針是C語言的靈魂、精華與根本所在,其內容也是C語言的重點及難點.能否正
確理解和使用指針是衡量學生掌握C語言的一個重要標志,也直接影響學生對<數據結構>和<操作系統>等後續課程的學習和把握.本文從指針的概念、指針
的運算等來淺析C語言指針.
8.期刊論文吳斌.WU Bin C語言指針的教學 -安徽職業技術學院學報2004,3(3)
指針是C語言的低級語言特性.使用指針程序員可以按地址操作計算機內存,靈活實現一些特定功能;使用指針可以方便地表達復雜的數據結構,使程序
簡潔、高效、緊湊,指針是整個C語言課程的重點以及後續課程的重要基礎.指針是C語言教學難點,在教學中採取適當的策略和方法完全可以取得較為滿意
的效果.
9.期刊論文彭程.楊春生C語言指針操作技巧探討 -中國高新技術企業2008,""(10)
指針增加了我們控製程序的靈活性,但是指針使用不當就會出現野指針,危害整個程序的運行,所以在程序中使用指針時應十分小心,養成良好的編碼
習慣,避免出現野指針.
10.期刊論文劉麗梅 復習C語言應注意的幾個方面(之四)--針對CCT C語言指針部分 -承德職業學院學報
2005,10(3)
本文主要針對CCT中的C語言部分,在復習時應該注意的幾個方面,以講、例結合的方式作了詳細的論述.
❽ c語言指針用法
1、使用場景
使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a數組首地址
//*b=2; 無法直接初始化
//printf("%d ", *b);
e=e+2; //移動兩個地址單元
d=&c; //d指向c的地址來表示值
c=4; //修改原c變數的值,d指針的值會發生改變
b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲值
*b=2;//分配空間後可以直接賦值了
printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);
2、類型說明
(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元
(2)char *b:表示一個指向char變數的指針
*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p ",*a,*(a+1),a);
(8)c語言指針教學擴展閱讀:
指針的運算
指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算
(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d ",*a);
結果輸出2。
參考資料來源 :指針-網路
❾ c語言指針詳解
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。數據在內存中的地址也稱為指針,如果一個變數存儲了一份數據的指針,我們就稱它為指針變數。
計算機中所有的數據都必須放在內存中,不同類型的數據佔用的位元組數不一樣,例如 int 佔用 4 個位元組,char 佔用 1 個位元組。
為了正確地訪問這些數據,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以准確地找到某個位元組。
C語言用變數來存儲數據,用函數來定義一段可以重復使用的代碼,它們最終都要放到內存中才能供 CPU 使用。數據和代碼都以二進制的形式存儲在內存中,計算機無法從格式上區分某塊內存到底存儲的是數據還是代碼。
當程序被載入到內存後,操作系統會給不同的內存塊指定不同的許可權,擁有讀取和執行許可權的內存塊就是代碼,而擁有讀取和寫入許可權(也可能只有讀取許可權)的內存塊就是數據。
CPU 只能通過地址來取得內存中的代碼和數據,程序在執行過程中會告知 CPU 要執行的代碼以及要讀寫的數據的地址。
如果程序不小心出錯,或者開發者有意為之,在 CPU 要寫入數據時給它一個代碼區域的地址,就會發生內存訪問錯誤。這種內存訪問錯誤會被硬體和操作系統攔截,強製程序崩潰,程序員沒有挽救的機會。
變數名和函數名為我們提供了方便,讓我們在編寫代碼的過程中可以使用易於閱讀和理解的英文字元串,不用直接面對二進制地址,那場景簡直讓人崩潰。
需要注意的是,雖然變數名、函數名、字元串名和數組名在本質上是一樣的,它們都是地址的助記符,但在編寫代碼的過程中,我們認為變數名表示的是數據本身,而函數名、字元串名和數組名表示的是代碼塊或數據塊的首地址。
(9)c語言指針教學擴展閱讀
指針使用(* 和 &)
*&a可以理解為*(&a),&a表示取變數 a 的地址(等價於 pa),*(&a)表示取這個地址上的數據(等價於 *pa),繞來繞去,又回到了原點,*&a仍然等價於 a。
&*pa可以理解為&(*pa),*pa表示取得 pa 指向的數據(等價於 a),&(*pa)表示數據的地址(等價於 &a),所以&*pa等價於 pa。
對星號*的總結
在我們目前所學到的語法中,星號*主要有三種用途:
1、表示乘法,例如int a = 3, b = 5, c; c = a * b;,這是最容易理解的。
2、表示定義一個指針變數,以和普通變數區分開,例如int a = 100; int *p = &a;。
3、表示獲取指針指向的數據,是一種間接操作,例如int a, b, *p = &a; *p = 100; b = *p;。
❿ C語言指針的用法
1、指針的概念
指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型,指針所指向的類型,指針的值或者叫指針所指向的內存區,還有指針本身所佔據的內存區。讓我們分別說明。
先聲明幾個指針放著做例子:
例一:
(1)int*ptr;
(2)char*ptr;
(3)int**ptr;
(4)int(*ptr)[3];
(5)int*(*ptr)[4];
1、指針的類型
從語法的角度看,你只要把指針聲明語句里的指針名字去掉,剩下的部分就是這個指針的類型。這是指針本身所具有的類型。讓我們看看例一中各個指針的類型:
(1)int*ptr;
//指針的類型是int*
(2)char*ptr;
//指針的類型是char*
(3)int**ptr;
//指針的類型是int**
(4)int(*ptr)[3];
//指針的類型是int(*)[3]
(5)int*(*ptr)[4];
//指針的類型是int*(*)[4]
怎麼樣?找出指針的類型的方法是不是很簡單?
2、指針所指向的類型
當你通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了編譯器將把那片內存區里的內容當做什麼來看待。
從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類型。例如:
(1)int*ptr;
//指針所指向的類型是int
(2)char*ptr;
//指針所指向的的類型是char
(3)int**ptr;
//指針所指向的的類型是int*
(4)int(*ptr)[3];
//指針所指向的的類型是int()[3]
(5)int*(*ptr)[4];
//指針所指向的的類型是int*()[4]
在指針的算術運算中,指針所指向的類型有很大的作用。指針的類型(即指針本身的類型)和指針所指向的類型是兩個概念。當你對C越來越熟悉時,你會發現,把與指針攪和在一起的"類型"這個概念分成"指針的類型"和"指針所指向的類型"兩個概念,是精通指針的關鍵點之一。
本篇文章來源於 黑基網-中國最大的網路安全站點 原文鏈接:http://www.hackbase.com/lib/2008-03-09/13993.html