当前位置:首页 » 编程语言 » 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语言中什么叫指针复位

指针所指的地址,经过使用后改变到新的地址了,,,,,那么,让指针重新指向开始的地址,是复位

~~~~~