當前位置:首頁 » 編程語言 » c語言指針讀程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言指針讀程

發布時間: 2023-03-07 22:23:22

c語言指針讀程題

考察的是:

  1. 全局變數和局部變數的作用域問題;注意main函數中的i是局部變數,fun函數中的i是全局變數;

  2. static存儲類型變數的生存期問題;注意fun函數中的m為staic修飾,只初始化依次,生存期直至退出程序

  3. 函數遞歸調用問題;

  4. 全局變數定義未初始化,默認值為0;全局變數i初值為0

第一次調用fun函數fun(i,&j),i為局部變數,值為1,j值為2. 全局變數i=0+2+1=3,m=3,main中的j值自增為3,輸出3,3,fun函數返回3

第二次調用fun函數,fun(3,&j),j值為3,全局變數i=3+3+3=9,m=4,main中的j值自增為4,輸出9,4


兩次輸出合在一起就成了3,39,4


Ⅱ C語言指針/引用/取值

指針是一個存儲計算機內存地址的變數。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變數地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。

根據出現的位置不同,操作符  *  既可以用來聲明一個指針變數,也可以用作指針的取值。當用在聲明一個變數時,*表示這里聲明了一個指針。其它情況用到*表示指針的取值。

&是地址操作符,用來引用一個內存地址。通過在變數名字前使用&操作符,我們可以得到該變數的內存地址。

// 聲明一個int指針

int*ptr;

// 聲明一個int值

int  val = 1;

// 為指針分配一個int值的引用

ptr = &val;

// 對指針進行取值,列印存儲在指針地址中的內容

int deref = *ptr;

printf("%d\n", deref);

第2行,我們通過*操作符聲明了一個int指針。接著我們聲明了一個int變數並賦值為1。然後我們用int變數的地址初始化我們的int指針。接下來對int指針取值,用變數的內存地址初始化int指針。最終,我們列印輸出變數值,內容為1。

第6行的&val是一個引用。在val變數聲明並初始化內存之後,通過在變數名之前使用地址操作符&我們可以直接引用變數的內存地址。

第8行,我們再一次使用*操作符來對該指針取值,可直接獲得指針指向的內存地址中的數據。由於指針聲明的類型是int,所以取到的值是指針指向的內存地址存儲的int值。

說穿了,指針就是地址吧,這里可以把指針、引用和值的關系類比為信封、郵箱地址和房子。一個指針就好像是一個信封,我們可以在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。我們可以把信封上的地址擦掉,寫上另外一個我們想要的地址,但這個行為對房子沒有任何影響。

Ⅲ c語言指針詳解

指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。數據在內存中的地址也稱為指針,如果一個變數存儲了一份數據的指針,我們就稱它為指針變數。

計算機中所有的數據都必須放在內存中,不同類型的數據佔用的位元組數不一樣,例如 int 佔用 4 個位元組,char 佔用 1 個位元組。

為了正確地訪問這些數據,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以准確地找到某個位元組。

C語言用變數來存儲數據,用函數來定義一段可以重復使用的代碼,它們最終都要放到內存中才能供 CPU 使用。數據和代碼都以二進制的形式存儲在內存中,計算機無法從格式上區分某塊內存到底存儲的是數據還是代碼。

當程序被載入到內存後,操作系統會給不同的內存塊指定不同的許可權,擁有讀取和執行許可權的內存塊就是代碼,而擁有讀取和寫入許可權(也可能只有讀取許可權)的內存塊就是數據。

CPU 只能通過地址來取得內存中的代碼和數據,程序在執行過程中會告知 CPU 要執行的代碼以及要讀寫的數據的地址。

如果程序不小心出錯,或者開發者有意為之,在 CPU 要寫入數據時給它一個代碼區域的地址,就會發生內存訪問錯誤。這種內存訪問錯誤會被硬體和操作系統攔截,強製程序崩潰,程序員沒有挽救的機會。

變數名和函數名為我們提供了方便,讓我們在編寫代碼的過程中可以使用易於閱讀和理解的英文字元串,不用直接面對二進制地址,那場景簡直讓人崩潰。

需要注意的是,雖然變數名、函數名、字元串名和數組名在本質上是一樣的,它們都是地址的助記符,但在編寫代碼的過程中,我們認為變數名表示的是數據本身,而函數名、字元串名和數組名表示的是代碼塊或數據塊的首地址。

(3)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語言指針程序

#include<stdio.h>
#include<string.h>
char
*fun(char
*s,char
*t)//函數功能是在字元串S中找字元串T
{
char
*p,*r,*a;
a=NULL;//是一個標志,開始沒查找到
//開始s=&s[0]
while(*s)//從S
的第一個字元開始查找,直到遇到'\0'
{
p=s;
r=t;
while(*r)//從T
的第一個字元開始查找,直到遇到'\0'
if(*r==*p)//如果在S字元串中找到了第一個
T字元串的T[0],
{
r++;//在比較T[1]
t[2]....
p++;//同上
}
else
break;
if
(*r=='\0')
a=s;//表明查找到了
s++;
}
return
a;//返回NULL沒到到,否則找到了
}
main()
{
char
s[100],t[100],*p;
printf("\n
please
enter
string
S:");
scanf("%s",&s);
printf("\n
please
enter
string
T:");
scanf("%s",&t);
p=fun(s,t);
if(p)//真,為找到了
printf("\n
the
result
is
:%s\n",p);
else
printf("\n
not
found!\n");
}