摘要:
void f(int p*)void f(int p[])void f(int p[4])对于传递数组类型的参数,一直很晕,其实以上三者是相同的,c语言中不能传递数组,只能传递第一个元素的地址,所以c语言在函数中没有数据越界方面的保护机制,所以可以额外的传递一个表示大小的参数,还可以这样void f(int (&p)[12]),这个p表示指向数组的指针,数组大小是12,我是这样理解的。数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。 数组形参是个容易出问 阅读全文
摘要:
1.char *s1 = "ssss";2.char s2[] = "bbbb";对于第一种,我是无法理解,无法想象字符串赋值给一个char类型的指针,查了一番貌似这样,不是把字符串的指针给s1,而是字符串第一个字符的地址,对于c标准库的string.h的函数strcpy(char *dest,const char* src),好像也能把第二个参数以""这样的字符代替,估计取得也是第一个字符的首地址,"ssss"存储在程序的常量区,不可变,指针在栈中,可以变,这种关系很微妙2.第二种完全是数组,但s2是不能改变的, 阅读全文
摘要:
int a[3],这个a到底是什么?每次遇到c语言的这些东西,总是把我绕一把,搞的晕网上说法很多,暂时理解:首先他不是一个指针(网上也有说他是int const*),是个常量,他的值和&a[0]相等,也指向了数组的第一个元素,&a是数组的地址,数组的地址真好和数组的第一个元素的地址相等,所以&a = &a[0],反正记得是第一个元素的地址就行了,所以才能通过a[8],这样同偏移量寻址,知道第8个元素 阅读全文
摘要:
这个问题总是讨论,有时又被弄晕了,特来复习一下int i = 0; int s = ++i+4; cout<<s<<endl;cout<<5,而i+++4返回4,其实这样的i++先运算,再加,++i先加再运算,就是这样而马上想到i+++i多少?其实这个测试是0,其实这个与顺序点和求值顺序有关:具体看这个:经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout << a 阅读全文