打印
[技术问答]

C语言指针学习

[复制链接]
614|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
598330983|  楼主 | 2016-3-22 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.数组元素
看下面代码
inti,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<10;i++)
{
printf ( “%d”,a );
}
很显然,它是显示a 数组的各元素值。
我们还可以这样访问元素,如下
inti,a[]={3,4,5,6,7,3,7,4,4,6};
for(i=0;i<=9;i++)
{
printf ( %d,  *(a+i) );
}
它的结果和作用完全一样
2. 通过指针访问数组元素
inti,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
pa =a  ;//请注意数组名a直接赋值给指针 pa
for(i=0;i<=9;i++)
{
printf ( “%d”,pa );
}
很显然,它也是显示a 数组的各元素值。
另外与数组名一样也可如下:
inti,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
pa =a;
for (i=0;i<=9;i++)
{
printf ( “%d”,*(pa+i) );
}
pa=a即数组名赋值给指针,以及通过数组名、指针对元素的访问形式看,它们并没有什么区别,从 这里可以看出数组名其实也就是指针。难道它们没有任何区别?有,请继续。
3. 数组名与指针变量的区别
请看下面的代码:
inti,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
pa =a;
for(i=0;i<=9;i++)
{
printf ( “%d”, *pa);
pa++ ;  //注意这里,指针值被修改
}
可以看出,这段代码也是将数组各元素值输出。不过,你把{}中的pa改成a试试。你会发现程序编译 出错,不能成功。看来指针和数组名还是不同的(数组名是常量,不能改变的,而指针变量是变量)。其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代码不同的是,指针pa在整个循环中,其值是不断递增的,即指针值被修改了 。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++.前面45节中pa*pa+i )处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。
4. 申明指针常量
再请看下面的代码:
int i,a[]={3,4,5,6,7,3,7,4,4,6};
int * constpa=a;//注意const的位置:不是 const int * pa
for(i=0;i<=9;i++)
{
printf ( “%d”, *pa );
pa++ ;  //注意这里,指针值被修改
}
这时候的代码能成功编译吗?不能。因为pa指针被定义为常量指针了。这时与数组名a已经没有不同 。这更说明了数组名就是常量指针。但是…
int * const a={3456737446}//不行
int a[]={3456737446}//可以,所以初始化数组时必定要这样。
以上都是在VC6.0上实验。


沙发
IversonCar| | 2016-3-22 21:55 | 只看该作者
指针在写新唐的程序的时候非常重要,也比较难学

使用特权

评论回复
板凳
643757107| | 2016-3-22 22:06 | 只看该作者
指针是跟硬件无关的,不过在用于操作存储区域的时候是非常的方便

使用特权

评论回复
地板
598330983|  楼主 | 2016-4-4 22:02 | 只看该作者
指针是跟内存的存储有关系的,因为所有的单片机操作都是要用到内存的,因此可以说无关了。

使用特权

评论回复
5
gaoyang9992006| | 2016-4-5 12:41 | 只看该作者
除了必须用指针操作外,其他的一概不随便用。

使用特权

评论回复
6
598330983|  楼主 | 2016-4-6 11:39 | 只看该作者
指针只能指到一个地址,而不能指定目标的大小。

使用特权

评论回复
7
玛尼玛尼哄| | 2016-4-6 17:09 | 只看该作者
指针和数组名还是不同的(数组名是常量,不能改变的,而指针变量是变量)

使用特权

评论回复
8
ccw1986| | 2016-4-6 22:11 | 只看该作者
数组和指针里的数据都是连续存放的吧

使用特权

评论回复
9
gejigeji521| | 2016-4-7 22:00 | 只看该作者
指针可以传递好几个函数进去,比如在初始化端口的时候或者某个外设时候,可以通过结构体变量对成员初始化,然后通过指针传递进去。

使用特权

评论回复
10
598330983|  楼主 | 2016-4-11 07:58 | 只看该作者
在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

246

主题

5384

帖子

22

粉丝