彻底搞定C语言指针 第三篇

1.数组元素

看下面代码

int i,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<=9;i++)
{
printf ( “%d”, a[i] );
}

很显然,它是显示a 数组的各元素值。

我们还可以这样访问元素,如下

int i,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<=9;i++)
{
printf ( “%d”,  *(a+i) );
}

它的结果和作用完全一样

2. 通过指针访问数组元素

int i,*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[i] );
}

很显然,它也是显示a 数组的各元素值。

另外与数组名一样也可如下:

int i,*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. 数组名与指针变量的区别

请看下面的代码:

int i,*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++.前面4,5节中pa[i],*(pa+i )处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。

4. 申明指针常量

再请看下面的代码:

int i, a[]={3,4,5,6,7,3,7,4,4,6};
int * const pa=a;//注意const的位置:不是 const int * pa,
for (i=0;i<=9;i++)
{
printf ( “%d”, *pa );
pa++ ;  //注意这里,指针值被修改
}

这时候的代码能成功编译吗?不能。因为pa指针被定义为常量指针了。这时与数组名a已经没有不同 。这更说明了数组名就是常量指针。但是…

int * const a={3,4,5,6,7,3,7,4,4,6};//不行

int a[]={3,4,5,6,7,3,7,4,4,6};//可以,所以初始化数组时必定要这样。

以上都是在VC6.0上实验。

时间: 2024-11-07 14:18:46

彻底搞定C语言指针 第三篇的相关文章

彻底搞定C语言指针 第四篇

1 int i 说起 你知道我们申明一个变量时象这样int i :这个i是可能在它处重新变赋值的. 如下: int i=0: //- i=20://这里重新赋值了 不过有一天我的程 序可能需要这样一个变量(暂且称它变量),在申明时就赋一个初始值.之后我的程序在其它任何处都 不会再去重新对它赋值.那我又应该怎么办呢?用const . //************** const int ic =20: //- ic=40://这样是不可以的,编译时是无法通过,因为我们不能对 const 修饰的ic

彻底搞定C语言指针 第五篇

一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行 --唉呀,谁扔我鸡蛋?) 1.考题一:程序代码如下: void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf ("x=%d,y=%d\n",x,y) } void main() { int a=4,b=6; Exchg1 (a,b) ; printf("a=%d,b=%d\n",a,b) } 输出的结果 : x=____,

彻底搞定C语言指针 第七篇

函数名与函数指针 一 数调用 一个通常的函数调用的例子: //自行包含 头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; } void MyFun(int x) //这里定义一个MyFun函数 { printf ("%d\n",x); } 这个MyFun函数是一个无返回值的函数,

彻底搞定C语言指针 第六篇

指向另一指针的指针 一.针概念: 早在本系列第二篇中我就对指针的实质进行了阐述 .今天我们又要学习一个叫做指向另一指针地址的指针.让我们先回顾一下指针的概念吧! 当我 们程序如下申明变量: short int i: char a: short int * pi: 程序会 在内存某地址空间上为各变量开辟空间,如下图所示. 内存地址→6 7 8 9 10 11 12 13 14 15 ------------------- --------------------------------------

彻底搞定C语言指针 第一篇

1.语言中变量的实质 要理解C指针,我认为一定要理解C中"变量"的存储实质, 所以我就从"变量"这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13 ----------------------------------------------------------------- ... | | | | | | | |.. ------------------------------- ------------

彻底搞定C语言指针 第二篇

二.指针是什么东西 想说弄懂你不容易啊!我们许多初学指针的人都要这样的感慨.我常常在思索它,为什么呢?其实生活中处处都有指针.我们也处处在使用它.有了它我们的生活才更加方便 了.没有指针,那生活才不方便.不信?你看下面的例子. 这是一个生活中的例子:比如说你要 我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一 张纸条放在你的桌上.纸条上写着:你要的书在第2层3号的书架上.当你回来时,看到这张纸条.你就 知道了我借与你的书放在哪了.你想想看,这张纸条的作

开发unity插件——一次搞定unity编辑器常用功能

开发unity插件--一次搞定unity编辑器常用功能 这篇文章主要分享unity中与editor插件等相关的使用,比较基础,不过如果都掌握了就可以扩展写一些unity插件了,平时开发中也会提升工作效率. editor相关脚本一定要放在Editor文件夹下,继承monobehaviour的文件不要放到Editor文件夹下. monobehaviour相关的编辑器功能 首先常用的在继承monobehaviour类中写public变量可以在inspector中序列化可编辑一般人都知道了,下面是一些可

c-C(++)语言 碰到输出手法 不能搞定 求解答 (注 : 不用迭代 )

问题描述 C(++)语言 碰到输出手法 不能搞定 求解答 (注 : 不用迭代 ) 1.读取一个文件 链接起来 行,列: 2.利用这个链表,输出成员间的所有可能组合: 本人挤出的代码如下,供参考: #include "stdafx.h" #include using namespace std; class Teacher { public: char name[20]; Teacher * tnext; Teacher (char * name):tnext(tnext=NULL) {

用Photoshop滤镜三分钟轻松搞定拼图

滤镜 女儿最喜欢玩拼图游戏,每次买拼图玩具的理由就是它们的画面不一样.家里的拼图玩具堆成山,可是她的兴致依然不减. 一天,我上网时无意中发现了Photoshop的一款制作拼图的滤镜--AV Bros.公司的Puzzle Pro滤镜.下载回来一试,果然效果不错!女儿喜欢的拼图玩具仅用三分钟就轻松搞定了.好东西不敢独享,下面我就给大家详细介绍一下. 首先,到http://download.sina.com.cn/cgi-bin/detail.cgi?s_id=8779去下载并安装这款滤镜,关于如何安