全部博文(87)
分类: C/C++
2012-04-16 10:54:28
卓跃教育C语言强化之指针高级应用学习心得(01)
指针是C语言的精华,不管你信不信,反正我是信了。指针是面向对象语言所没有的,这也就使得C语言有着不可替代的作用。上江老师的课,还真的有收获,这主要源于他讲的课有深度,那些东西都是在学校课上所接触不到的,废话不多说,下面看具体实例。
1.多维数组元素的地址
int b[5] = {1,2,3,4,5};
printf("%p %p\n",b,&b);
%p: 按地址格式输出
&b:数组名b本来就是一个地址,为何还可以再利用一次取地址符呢?有些不好理解,a[5][5]是二维数组,可以看做a[5]是一维数组,每个数组元素包含5个元素。a[5]是地址,但是指向列元素,a也是地址,但是指向行,即指针的类型改变了。因此,&b可以看作是类似二维数组,作&运算后,是指向行的。空口无凭,当然得用实例证明。
以上输出结果:
代码改成:printf("%p %p\n",b,&b 1);输出结果应该是相对b[0]地址偏移了20个字节。证据如下: 地址是16进制格式
扩展:
int x = 0x87654321;
printf("%p\n",(void *)x);
printf("%p\n",&x);
输出结果如下:
printf("%p\n",(void *)x); //打印x被转换为指针的地址,就是他的值
printf("%p\n",&x); //打印x的地址
2.给main()函数传参
int main(int argc, char* argv[])
argc:表示参数的个数,注意这里有包含执行文件名
char* argv[]:是指针数组,它可以指向多个字符串
argc和argv是形参,当然可以也可以是其他名字
main()函数是由操作系统调用的,那形参的值从何处得到呢?实际上实参和形参是和命令(程序名)一起给出的,如:
命令名 参数1 参数2 ……参数n
在linux环境下,很容易: ./filename 参数1 参数2 参数3……
但在windows下呢?
方法一:在运行里输入
注意:filename包含盘符、文件路径、文件名
方法二:vc6.0下,设置如下
课上的东西当然很多,书上有讲的东西我没有重述,那样没多少意义,我只是说了一些书上找不到的,但却又比较实用的东西