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

c語言指針復位

發布時間: 2022-07-29 17:27:56

A. c語言指針自增後怎麼還原到首地址啊,求高手解~

int *origin = null;//保存最初的位置
int *p = .....//給要操作的指針賦初值,如int *p = a;
origin = p;//保存
p++/p--之類的你想做的操作
要使用p的首地址,使用origin即可

B. c語言問題

樓上說的效率也太低了吧

#include<stdio.h>
//#include<malloc.h>
#include<stdlib.h>
//#include <math.h>

void main()
{
FILE* handle;
int flen,fset,fend;
handle=fopen("c:\\test.dat","rb");
if(handle == 0)
{
printf("file can not be open!");
return;
}
else
{
fseek(handle, 0, SEEK_SET); //文件指針復位
fset = ftell(handle); //獲得文件指針
fseek(handle, 0, SEEK_END); //文件指針指向末尾
fend = ftell(handle);
flen = fend - fset ;
fseek(handle, 0, SEEK_SET); //文件指針復位,為了以後read
printf("file len is %d",flen);
fclose(handle);
}
}

在c盤創建一個test.dat文件做測試。

C. C語言程序填空問題~高分速求解~~!

第一個
#include <stdio.h>
main()
{
int a[5]={1,3,5,7,9}; /* a是int數值的數組 */
int *num[5],i,*p; /* num是指向int類型的指針型數組,p是指向int型的變數 */
int *f(int *x[],int); /* 返回指針值的f函數的聲明 */

for (i=0;i<5;i++)
{
num[i] = &a[i]; /* num的每個分量指向a的每個相應元素 */
}

p=f(num,2); /* 返回num[2]分量所指的數組a中的元素的地址 */

for ( ; p<=num[4]; p++) /* 在num[2]~num[4]地址范圍內掃描 */
{
printf(" %d\t", *p); /* 輸出該地址范圍內的數據 */
}

}

int *f(int *x[],int i)
{
int k=0;

for (; k<i; k++) ; /* 如果這個語句省略,需要修改什麼? */
return x[k]; /* 返回num[i]的所指的地址 */
}

第二個
#include "stdio.h"
#define N 10

main()
{
int i,k,a[N],sum,count,*p; /* 所有變數和數組a的基類型都是int */

count=sum=0;

do
{
printf(" input k: \n");
scanf("%d",&k); /* 總共要求輸入k個數 */
}
while (k<=0||k>N); /* 直到型循環確保0≤k≤N */

printf(" input a[0]~a[%d]:\n",k-1);

for (p=a;p<a+k;p++) /* 指針p指向數組a的首地址,p依次求出後繼值 */
{
scanf("%d", p); /* 此處的p等價於&a[i] */

if (*p > 0) /* 引用指針變數p所指變數的值 */
{
sum += *p; /* 指針p所指變數*p的值>0者相加 */
count++; /* 正整數個數統計 */
}
}

p = a; /* 指針復位,重新指向數組a 的首地址 */

while (p<a+k)
{
printf("%-5d", *p++); /* 先執行*p,取出所指變數的值,再指向數組的下一元素 */
}

printf("\n Numberof above >0 is : %d\n",count);
printf(" Sum of >0 is : %d\n",sum);
}

D. C語言編程實踐-求解求解求解!!!!!!

不知道為什麼沒有代碼模式,只能這樣復制給你了。也不知道你的T跟R字元串多少個字元,能不能用字元串庫函數,程序里就假設它們相等了,沒用到字元串庫函數。

#include<stdio.h>

char str_compare(char *p1,char *p2);

void str_change(char *p1,char *p2);

char *p=0;

int main()

{

char SS[]="China American Russian Japan England Japan American",TT[]="American",RR[]="12345678";

char *ps=SS,*pt=TT,*pr=RR;

printf("原來字元串:");

for(;*ps!='';)

{

printf("%c",*ps);

ps++;

}

ps=SS;//指針復位

printf(" ");

for(;*ps!='';)

{

if(str_compare(ps,pt))

str_change(ps,pr);

ps++;

}

ps=SS;//指針復位

printf("替換後符串:");

for(;*ps!='';)

{

printf("%c",*ps);

ps++;

}

printf(" ");

return 0;

}

char str_compare(char *p1,char *p2)//判斷字元串P1中是否含有字元串P2

{

int i=0;

for(;*p2!='';i++)

{

if(*p2!=*p1) return 0;

else

{

p2++;

p1++;

}

}

p=p1-i;//記錄下有相同字元串的位置

return 1;

}

void str_change(char *p1,char *p2)//將字元串P2寫入到P1中

{

p1=p;

for(;*p2!='';)

{

*p1=*p2;

p1++;

p2++;

}

}

E. C語言 指針初始化和復位的矛盾

你應該堅持和明確一個原則,誰創建的誰釋放。創建intList並沒有創建list。為了放心起見,可以在intList初始化後,馬上讓intList->list=NULL.
其他地方創建了int數組並把首地址賦給它後,它自然不再為NULL.
最後在釋放的時候,判斷
if(intList->list)
{
delete[] intList->list;
intList->list=NULL;
}
====
我應該了解你的意思了.
一個做初始化一個做復位這個其實很常見了.指針初始化為0,以後復位都以此判斷。
直接intList il,其中的list地址是0xcccccccc
通過new或者malloc出來的,list地址是0xcdcdcdcd
他們都足夠大,大到超出了程序的用戶地址空間.也許可以從這里來判斷.

F. 如何使用單片機C語言實現復位

樓主的意思只是要求復位到裝置的初始狀態,而不是單片機復位。這僅僅需要對所有輸出口轉換到規定的初始狀態即可,這在C編程時採用位操作即可,例如置位或者清除位操作。

G. C語言中, 指針變數(指向數組)怎樣使其移回第一位

兩種方式:
1 在移動的時候,記錄移動的偏移量,存在變數n中。這樣對於移動後的指針p,計算
p-=n;
就是將其移動到第一位。

2 更常用的方式為,在有此類需要時,運算前保存原始的位置,即定義同類變數p1,指向第一位,比如計算前做p1 = p;
這樣在需要移回時,只需要p = p1即可。
如果p移動時與原始數組在同一個作用域內,那麼也可以直接重新復制p為原始數組名。

H. 51單片機如何實現軟體復位系統(C語言),謝謝

單片機實現軟體復位(軟復位)的方法及討論

單片機實現軟體復位(軟復位)的方法及討論

(天堂雨林博客blog.sina.com.cn/acer收集整理)

單片機軟復位有什麼好的方法?如從機收到復位命令(軟體命令),程序怎麼使機器復位?雖然要使軟體始終處於可控狀態,最好不要用"復位",因為復位是純硬體過程,軟體是不可控的.但是我們還是要討論方法,一般流傳的方法如下:

1、放狗;

2、((void(code *)(void))0x0000)();

3、用單片機一個引腳控制點一下RSTRST;

4、用單片機一個引腳控制重新加電;

5、用單片機自帶的軟體復位指令或內狗指令;

6、goto大法;

天堂雨林博客對以上方法的意見:

方法1:「放狗」是單片機軟復位的最好辦法,也基本上是唯一的一個辦法。但並不是所有單片機都具備看門狗的功能,也不是一個萬全之策。

辦法2:這不是復位,只是把程序轉到地址0去執行,不如用一個JMP更直接。目前可能極少數單片機或者用戶已經自行添加Boot load時用戶程序的程序開始地址並不為0x0000,所以需要查找這些特定單片機的啟動地址。
在keil C51下面可以這樣實現:
void soft_reset(void)
{
((void (code *) (void)) 0x0000) ();
}
在需要軟體復位的地方使用語句:
soft_reset();
一般可實現軟體復位。

辦法3:用軟體實現的硬復位。需要犧牲一個單片機引腳,且增加了單片機外部電路構造的復雜性,很不可取。

辦法4:類似辦法3,同樣需要犧牲一個單片機引腳,且增加了單片機外部電路構造的復雜性,很不可取。但不能把它單單地當成是復位,應該叫上電復位。

辦法5:Atmel 89C不帶內狗,S的有內狗,只是一條指令就行。如STC的單片機有軟體復位指令,即ISP_CONTR,地址在0E7H 單元(即str ISP_CONTR=0xE7),MOV ISP_CONTR,#00100000B(C語言為ISP_CONTR=0x20),內狗也是一條指令MOV WDT_CONTR,#00111100B!
STC 51系列單片機Datasheet中指出:傳統的8051 單片機由於硬體上未支持此功能,用戶必須用軟體模擬實現,實現起來較麻煩。現STC 新推出的增強型8051 根據客戶要求增加了ISP_CONTR 特殊功能寄存器,實現了此功能。用戶只需簡單的控制ISP_CONTR 特殊功能寄存器的其中兩位 SWBS / SWRST 就可以系統復位了。

辦法6:程序從頭(上電復位處)開始運行,且只有一個循環這種情況,當然可以用goto,如在main()的開頭設一個start:,在程序的唯一循環中設定一個條件,然後goto命令。但需要注意,如果是在中斷常式里,那麼中斷掛號寄存器仍置位,同級中斷不能執行。所以必須先使中斷掛號寄存器清零,EA = 0。只有RETI指令可以使中斷掛號寄存器清零。51單片機有兩級中斷優先順序,所以需要執行兩次RETI指令。這用匯編是很簡單的事,而C則比較難以實現。但是,goto命令盡量不要用,因為goto會到處亂竄,而且goto不能跑到函數外面去執行一個命令。

最後總結如下:最好使用辦法5最為簡潔方便,使用辦法2實現也不失為一種好方法

I. C語言中什麼叫指針復位

指針所指的地址,經過使用後改變到新的地址了,,,,,那麼,讓指針重新指向開始的地址,是復位

~~~~~