问清楚自己这几个问题,就对函数很了解了,实际上,函数体应该是黑盒子内部的东西,函数参数和返回值是外部接口。3、变量的作用域和存储类别:弄清楚两对概念:全局变量和局部变量,静态变量和动态变量,就没多少问题了 4、指针:指针是C语言的最难点,也是最有特色的地方,初学者一般不容易深入理解,我...
p2,*p1都是变量,变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义就变了,而地址只能赋值给指针不能给变量。最后建议学习看书一定要读国外原著,国内翻译或作者的理解或描述,未必就是正确和合适...
运用代码解释指针运用的理解如下:include<iostream> using namespace std;int fun1 (int a,int b){ int c;c=a;a=b;b=c;cout<<"a1:"<<a<<";b1:"<<b<<endl;} int fun2 (int *a,int *b){ int *c;c=a;a=b;b=c;cout<<"a2:"<<*a<<";b2:"<<*b<<endl;} int fun3...
int a[ ]={0,1,2,3,4,5,6,7,8,9}:意思是a数组为包含{0,1,2,3,4,5,6,7,8,9}的整数数组,int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a:p是等效于a的整数指针,你应该这样读int *p =a;(*号跟着变量走)定义了一个指针等于a数组首地址。
当左边是个对象时用“.”当左边是个指向对象的指针时用“->”比如,Class A;Class *B=A;A有函数myfun()则调用时用 A.myfun();B->myfun();
作为定义的时候,是一个左结合操作符,优先跟其左边的描述相结合 int * : 整型指针 (*p) : 用括号调整优先级,强迫其与p作结合,表示p是一个指针类型(否则此处p应与"()"结合作为一个函数,而该"*"则应跟左边的"int *"结合作为"int **"整型指针的指针)如此,相应的我们就很容易解释其他的如...
B选项中地址加5其实不是单纯的数字加5哦 例如32位机器上(一个指针4字节),p1 += 5实际的操作是在那个地址数字上增加了4 * 5 = 20 C选项,p1, p2的类型均为 char* 型, 但是 &p2 的类型为 char** 所以C的赋值类型不对 B是对的 ...
所以pa+1后,就是指向第二行。所以(pa+1)[1],就是取从第二行开始的二维数组({{4,5,6},{7,8,9}})的第2航行元素,也就是{7,8,9}这样的一维数组。所以前面*取的就是{7,8,9}的首元素值,再算++,就是对首元素的值自增。所以这个代码,pa是指向二维数组的指针,那么式子就是对第...
定义int *p=a,那么p+0就是a[0]的首地址,p+i就是a[i]的首地址,p+2就是a[2]的首地址,*(p+0)就是a[0][0]的地址,*(p+1)就是a[1][0]的地址,*(p+2)就是a[2][0]的地址;而定义int (*p)[4];代表p是一个数组指针,指向一个4个 int大小的数组,此时p=a之后,p就是一...
这里要理解的是,把c[]传入fun时并没有创建整个字符数组的副本,只是创建了指针c的副本,所以c和ca同时指向一个字符串。&ca[1]和&c[1]:这两个值也相等,他们和上面的其实是一个意思。只是若编写程序验证时,若先验证++ca则验证&ca[1]之前先要ca--。c和&c:由上知不相等。