您的位置:

c语言全局指针,C语言全局指针定义

c语言全局指针,C语言全局指针定义

更新:

本文目录一览:

c语言定义了两个全局的指针变量,为什么这两个指针变量指向同一地址

C里面好像全局变量 会被自动付值为0

而函数内部的临时变量则不会被付值,而是随机的数值

c语言指针

第一个题:(考的是 指针)

void int sp(int *a){

    int b = 2;

    a = b;    // a 指向 b

    *a = *a * 2;    // 即将 b 的值 乘以 2, b 变为 4

    printf("%d,", *a);    // 输出 a 指向的变量的值,即 b 的值 4

}    // 所以 sp() 函数其实就是输出 4

printf("%d,%d\n", k, *p);    // 首先输出 k 的值 3,然后输出 指针p 指向的变量k的值3

// 注意,指针p 虽然作为参数传入 sp()函数,但只是将其值赋给函数的形参 指针a

// 指针a 此时虽然也指向了 变量k, 但其随后又指向了 变量b,并修改的是 b 的值

// 因此,指针p 的指向并没有改变,依然指向 变量k

输出结果就是 4,3,3

第二个题:(考的是 指向指针 的 指针,即 指针的 指针)

(由于有指针的指针,建议画图来理解各变量和指针间的关系)

int i = 3, *p = i, **r = p;

// p 指向 整型变量i;r是指针的指针,r 指向 指针p

// 这里把 f(r); 替换为 完整的函数定义,便于理解

void f(int **s) {  // r 和 s 现在拥有相同的值,即它们指向 同一个指针,由于 r 指向的是 指针p,所以 s 也指向 指针p  

int *t = k; // 指针t 指向 全局变量k 

*s = t;    // *s 即 p,因此这条语句等同于 p = t,也就是 指针p 的指向被更改了,它现在和 指针t 一样,都指向 全局变量k 

printf("%d, %d, %d, ", k, *t, **s);    // 输出 k的值 7,*t 的值 7 (t 指向 k),**s 的值 7(**s == *(p) == 7,因为 s 指向 p,p 又指向 k) 

}

// 由于你的图最后没拍完整,我就当最后是 **r ,即使如果不是,只要你理解了也能自己分析

printf("%d, %d, %d\n", i, *p, **r);    // 输出 i 的值 3,*p 的值 即 k的值 7,**r的值 即 k的值 7,**r 的分析和 **s 一样

// 最后输出应该是 7,7,7,3,7,7

这道题就是通过使用 指向指针的指针,从而修改 所指向指针 的指向,对于这道题来说就是指针p的指向。

C语言,全局指针变量可以被修改吗?

可以.程序例子:

#include stdio.h

#include stdlib.h

int *p;

main()

{

int a,b;

p=a;

printf("%p a=%p\n",p,a);

p=b;

printf("%p b=%p\n",p,b);

return 0;

}

00

我的计算输出:

0012FF7C a=0012FF7C

0012FF78 b=0012FF78

C语言指针的定义

指针就是地址。

你说的是指针变量。

整形变量,浮点变量,字符变量,指针变量。通过起名的规律就知道指针变量是储存地址的。

指针变量和其他变量的用法一样,作用域一样。在一个子涵数中定义指针变量,是局部变量,其他函数是不能用的。

不要把指针变量想的太复杂,地址(指针)也是数据,和其他字符数据,整形数据一样,没什么差异。

当然,全局变量的指针变量当然可以多函数使用。

指针的定义:地址。

指针变量的定义:存储指针的变量。

C语言编程时使用全局变量和使用指针各有什么特点?

全局变量在整个程序中都可以用,也可能生命全局指针。

指针指向一个特定的地址。

C语言指针问题

int * p;

main()

{

int x=1,y=2,z=3;

p=y;//这里让指针p指向y

fun(x+z,y); //传参数为 int 型的 x+z == 4 , 和y的地址

printf( "(1) %d %d %d\n" , x , y , *p); //x = 1, y = 6, *p = 6 这里是因为传参数时传的是地址而且p是全局的指针所以在子函数里面会改变原来变量的值

}

fun(int x , int * y)

{int z=4;

*p=*y+z; //指针p是全局变量 *p = *y + z == 2 + 4 == 6, 这里之后y的值被改变成6了,因为p---y

x=*p-z; // x = *p - z == 6 - 4 == 2

printf( "(2) %d %d %d\n" , x , *y , *p); // x == 2, *y == 6 , *p == 6

}