当前位置:首页 » 编程语言 » c语言指针位寻址
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言指针位寻址

发布时间: 2023-04-13 01:48:18

c语言中,指针指向的地址.那个地址是什么地址

那个地址 是被指向的变毕耐量的地址。
当指针刚声明完毕时,它并无指向的地址,只有当指针与 某有存储地址的变量发生联系时,才有指向地址。
例如:
int *p; // 这时 p 没有指向地址
int a=3,b=14;
p = &a; 这时 p 指向了 变量 a 的地址了.
// 数值 *p 等于 a 里存放的数值。 printf("%d", *p); 得升棚 3。
这手笑春时,若 a = a+1; 输出 printf("%d", *p); 得 4。
p = &b; p 指向了 变量 b的地址 了,输出 printf("%d", *p); 得 14 啦。

⑵ 什么叫指针寻址

  1. 指令寻址分为两种。

  2. 顺序寻址方式

    由于指令地址在内存中按顺序液巧安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。

    这种程序顺序执行的过程,称为指令的顺序寻址方式。为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。

  3. 跳跃寻址方式

    当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。注意,程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以羡孝便及时跟踪新的指令地址。

    采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条闹派键件转移指令,就是为了实现指令的跳跃寻址而设置的。

⑶ C语言中,指向指针的指针如何取出其指向指针的地址

char **b = &a; 这次才是正确的二级指针使用方式,然后*b的值就是a,**b就是a指向的第一个字符。

⑷ C语言指针的地址范围是多少

C语言的指针地址范围是4字节空间,即从地址0x00000000~地址0xFFFFFFFF。但其中有些字段是系统保护的或所使用的硬件平台根本就不存在,所以用户指针并不能完全使用这个空间。不过用户不必担心,只要按规范使用指针,系统都会自动正确安排。

⑸ C语言中,如何让指针指向一个已知地址

让指针指向一个已知地址,必须转换类型,在地址前面加上int*,否则不成功。
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points
to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

⑹ C语言:用指针的方法查找数组中某个数在数组的位置

对于函数:int* find(int a[], int value),其中a为整型数组首地址,value是被检验值。我们可以利用指针a间接引用数组第一个元素的值,并将其与value比较,比较完后,将指针向后移动,再通过间接引用的方式比较下一个元素值,依次下去,直到在整型数组中找到被检验值或者整型数组所有元素比较结束为止。
那么这里有个问题,我们如何通过指针知到整型数组什么时候结束呢?对于整型数组而言,没有办法,所以我们必须先知道整型数组的长度,可以在参数中给出,也可以在主函数定义中知晓。
程序如下:
int* find(int a[], int value)
{
int i=0,*p=a;
for(i=0;i<=9;i++)
{
if(*p==value)
return p;
else
p++;
}
if(i>=10)
return 0;
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0};
int n;
scanf("%d",&n);
printf("%x %d",find(c,n),*(find(c,n)));/*第一个为函数返回地址,第二个为函数返回地址里的值*/
getch();
}
另外,我们测试一个程序或者函数是否正确不在于其能否正确运行,而在于其运行的结果是否符合我们的预期。针对上述程序,测试方法如下:
输入任意一个数,如果这个数在数组C内,看是否能够打印出16进制的地址数和与输入值相同的数;如果不在数组C内,看是否返回值为0的地址。

⑺ C语言中对指向多维数组的指针数组中多维数组元素的间接寻址问题

可以从一维数组开始看最简单。
int *a = new int[5];
a代表第一个元素的地址,所以第一个后面第n个可以用 *(a+n);
二维数组
int **a = new int[5][5];
a[i] 相当于一维数组里的 a, 它代表指向第一行元素的一个数组指针。
即:
a[i] ( *a ) 是 int* 型
所以指向第 2 行 数组 的指针: *(a+1)
指向第 i 行 第 j 列 数组 元素 的指针 (从0开始算) *( *(a+i) + j ) 或者 *( a[i] + j )

⑻ C语言中指针的地址问题

首先我要指出的是根指针的地址与指针存储的地址一般不可能相同~!(一楼列出的情况除外,将指针的地址赋给一个变量再纤宴将变量的地址赋给指针)

举个例子:
int number,*p;
number=1;
p=&number;

你可以这样理解,number 和 *p都是一个整型数据变量,程序在内存中

为它们都保留了一个地址(两个不同的地址),用以存放它们的值,在

number的毁歼银地址中保存的值是1,在*p的地址中保存的值是number的地址!

你也可以用 &p 求出*p 的根地址。(一般只改让在二维及以上数组、链表等高级主题中用到指针的根地址)

⑼ C语言指针,&*怎么得到地址的

*yprt是指针,yprt是计算机存储某个数据的地址,加上*表示指向这个地址存储的数据
若地址yprt里存储的是y,&*是单目运算符,符合右结合法则,所以先是运算*yprt,它的值是y,
然后再&y,它的运算结果是得出存储y的地址,就是yprt。
不懂继续问
望采纳

⑽ C语言指针指定地址

首先,不能这样做,你c语言操作的地址并不是真实的地址,是操作系统从内存的某一段虚拟给你的地址,每次都不一样,每个程序所使用的内存互不干扰。
第二,而你的程序退出后,所拥有的空间就被系统全部回收了。也就不存在了。否则,你c语言乱改一通,要是改到系统正在用的内存,系统不就出现异常了吗。内存并不是由你管理的,而是操作系统管理的。

假设 a程序的 p指针,指向 0xaaa地址 ,你修改 b程序的 p指针,指向0xaaa,也是无法修改的,每个程序的内存都是系统虚拟的。保证程序可以安全稳定的执行。