Ⅰ c语言指针(不很难)
指针是按你下面一种形式为标准定义的。地址和值挂钩了。
上面一种方法是地址,地址改变不影响值。所以操作后对于你printf("%d
%d\n",*p,(*q)++);没有值的影响
Ⅱ c语言指针问题,额~感觉指针好难,求高手解释
第一个:你设置的字符指针指向的是一个字符串,在设置字符数组的时候例如p【】,这就是一个指针,p是地址,这个声明方式等同于用*p来指向一个字符串。而实际应用中在不知道数组长度时,我们通常使用字符指针来指向一个字符串,节省空间。
所以输出的时候,我们需要的是输出目标的地址,p就是地址,不需要使用*号来代表地址。
第二个不要使用【】就可以了,因为p【】指代指针,或者*p指代指针,没有同时使用两个符号表示指针来指向一个字符串的。
Ⅲ C语言,。指针问题。难。
第一种
#include <stdio.h>
void main()
{
int a,b,*p1,*p2,*t=null;
p1=&a;
p2=&b;
printf("input two Number:");
scanf("%d%d",p1,p2);
*t=*p1;
*p1=*p2;
*p2=*t;
printf("after two Number %d %d\n",*p1,*p2);
}
/*定义指针,然后对它们初始化是p1=&a; p2=&b;而不能写成p1=a; p2=b;如果a b 是数组的话才能像这样赋值。*/
第二种
#include <stdio.h>
void main()
{
int a[2],i,*p;
p=a;
printf("input two Number:");
for(i=0;i<2;i++){
scanf("%d",p);
p++;
}
i=p[0];
p[0]=p[1];
p[1]=i;
for(i=0;i<2;i++)
printf("after two Number %d",a[i]);
}
Ⅳ 为什么c语言的指针有点难学
因为指针直接操作存储单元地址,比较抽象,所以难学。
Ⅳ C语言中指针很难学吗
一般人觉得指针难学因为在学指针前还没把表达式和变量的概念搞清楚。
1. 指针变量保存的是内存地址。用指针访问数据也称为间接寻址。类似于你找一个人,他住在“第一大院”。你直接去找第一大院就是直接寻址。如果他的住址只有一个住在“第五大院”的人知道,你去第五大院问出他家在第一大院这就是间接寻址。
1.+ 对于上面这种情况,如果我们认为第五大院是“知道他家住址的那个人的住址”,我们就可以进行一连串的间接寻址。另一方面也说明指针变量保存的地址也是数据的一种。
2. 指针变量的类型。指针变量的类型目的*仅仅*在于减少编程中可能发生的错误。这一点必须明确。根本上说指针变量的类型就是地址。我们为了避免不必要的错误强行加上了“只能保存整数的地址”之类的约束。好比住在第五大院的人只会去记中年人的地址。
3. 指针的操作。
3.0 声明:类型A的指针的类型写作 类型A* 比如int*。与此同时int*本身也是类型,我们可以写int**。就是int的指针的指针。
3.1 获取地址,对于内存变量表达式 &运算符可以获得其地址,类型是表达是类型的指针。比如对于变量int a。&a获得的就是类型是int *的a的地址。
3.2 重定向,对于指针变量或者指针变量表达式。*运算符可以获得其指向地址的变量,类型是原指针的上一级。对于int a; int* p = &a; *p等价于a,类型是int。因为*p是变量,我们可以进行x = *p(取值)和*p = 0(赋值)操作。
3.3 &和*都可以对变量表达式进行操作。比如数组int a[10]。我们可以通过&a[5]获得a第5个元素的地址。又如int** a。*a是一个int*类型的变量,我们可以进一步地**a获得类型是int的变量,这就是从第六大院的人口中问出知道A君住址的人在第五大院,然后再去第五大院问出A君住在第一大院的过程。
4. 数组和指针的混合。这个可以说是C/C++语法的bug...
int* a[4] 这个类型可以看成(int*)[4] 元素是int*类型,有4个元素
int (*a)[4] 这个其实是(int[4])* 指向int[4]类型变量的指针。
4.+ 数组变量其实也是指针。int b[4]; 变量b在多数情况下就是一个const int*,指向数组b所占用的内存,也就是数组b的第一个元素。*b和b[0]是等价的。对于int *a;我们可以直接进行a = b的操作,让指向数组b。
5. 指针的加法。对于int *a;我们可以进行a + N, a - N的运算。a + 1指向a指向的元素的下一个元素,相应的a - 1指向上一个元素,以此类推。于是*(a + 1)就对a指向的下一个元素进行重定向,等价于数组运算a[1]。
5.+ 对于int *a, *b; a - b获得的是b到a之间相差多少个元素,类型是int。比如 int x[5]; int *a = &x[0], *b = &x[3]; b - a的结果是3。相应的a - b的结果是-3
这些大体概括了指针的基本内容,可能有疏漏,指针的应用就是指针的基本操作和其他表达式、变量操作的配合。
Ⅵ c语言指针好难啊
指针指向变量地址,我觉得就是把指针当地址用就好。。。
Ⅶ C语言中最难的问题,指针问题!
这两种写法都可以的!
char *p;
char s[5]="skl" ;
p=s; 首先是声请一个指向char类型的指针变量p,然后将指针p指向数组s的首地址。
char s[5]="skl" ;
char *p=s; 这个意思是 定义一个char指针p然后给他初值,值为s数组的首地址。
Ⅷ 为什么都说C语言指针难
指针确实比较难,当然这是相对而言的。不是每个人对于刚接触的东西感觉都是一样的。指针对于大多数人来说确实不容易,不过呢要想找到一道能让人发狂的指针问题也不是什么难事。
Ⅸ C语言中的指针好难学的,该怎么办呀
指针可以说是c的一大特色,很多人对它却不慎了解,其实可以通过比较形象的方法让你明白,指针到底是个什么东西。c语言里的数据存储没有指针介入时就是直接操作的,就像你去一幢楼找人,保安都是直接把人带给你的,c存取数据也这样,但是有时候就是不知道这个变量的名字,也就是你不认识那个人叫什么,还能找到那个数据或人么,那就是可以在c中用指针来实现,相当于你不知道那人叫什么,但是你知道他住那个房间(我们这里假设一个房间就住一个人),保安还是可以把人带给你,c也一样,你指出了那个数据放在那个位置了,cpu也可以把数据找给你,一样的道理。还有就是这个会有什么好处呢,就要说道数组了,你在连续的内存单元存了一堆数,类似你的一群朋友住在那个楼里,而且是挨个住的,你要把他们叫出去玩,就如你要把数据拿出来用,那么本来一摇一个一个的报名字给保安,说哪个人那个人等等帮我找下,c里也可以通过这种方法来实现,但明显太麻烦了,如果你知道第一个人住的房间号,然后比如有有10个人,那么你只要说帮我叫下几号到几号人(指他们住的连续的房牌号),一下就哦了,保安也更容易做到,因为保安人名字可能不是知道,但是房间号一定知道,c里也一样,你不需要一个一个去调用这些数据,直接知道他们的第一个数据的地址,然后挨个往下数说到那个位置的数据帮我调用下就可以了,其实你给了一个变量,cpu还是要通过地址去找找到那个数,类似你和保安说那个人名字,他还是要查出他住那个房间一样。希望指正,也希望你能够对指针有很好的应用