本文目录一览:
- 1、c语言定义了两个全局的指针变量,为什么这两个指针变量指向同一地址
- 2、c语言指针
- 3、C语言,全局指针变量可以被修改吗?
- 4、C语言指针的定义
- 5、C语言编程时使用全局变量和使用指针各有什么特点?
- 6、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
}