发现一个很好的c学习网站
做了一些练习:
#include#include #define ARRLEN(arr) (sizeof(arr)/sizeof(arr[0]))f(int a) { auto b=0; static c= 1; // 奇怪的static特性 ,绝对是不同于java的 b = b+1; c = c+1; return (a+b+c);}ff(int *a) {// 函数结束后实参不发生变化;形参发生变化,但是形参作用域仅在函数内,在函数结束后立即被回收。 int aa=123; a = &aa;}fff(char *ch) {//同上 char *aa="a123"; ch = aa; printf("bb %s\n", ch);}char *ffff(char *ch) {// 函数结束aa的值返回,但aa返回之后就被回收了,即使这样,返回值还是有效的! 不会被回收的吧! char *aa="a123"; ch = aa; return aa;}fffff(int intarr[]) {//因为形参和实参指向同一块内存,函数中形参修改导致内存变化,虽函数结束形参消失,实参还是发生变化 int arr[] = {1,23,45,81,12}; intarr[2] = arr[3];}ffffff(char *charr[]) {// 同上 char *arr[] = {"aa","bb","cc","dd"}; charr[2] = arr[3];}fffffff(char *charr[]) {// 这种情况有别于上述两个例子,只是形参发生了指向的变化,而实参对应的内存并未变化,故函数结束后实参不变。 char *arr[] = {"aa","bb","cc","dd"}; charr = arr;}charstr() { char *ss = "abcdefghijkl"; // -- 这应该是最奇怪的一种数据类型, 存的是字符的指针(地址),但个数不定,直到'\0' // 为什么可以将字符串赋值给 char * ---- 这是c的特有的一种机制。 char *sss = "qwer"; int i; char ch; sss = ss; //ss = "sssss"; 可以; 但是*ss = "sssss"; 不行 *ss代表的是ss字符串的一个字符,故不能将字符串赋值给字符 ch = *(ss+3); // 可以对字符串中某个字符取值,不能设值? //*ss = 's'; // 不行, *ss已经是常量的原因? 左边不能是常量吧。。! 那怎么才可以获取字符串中字符的引用,而后赋值呢? 无解? for(i=0; i
c字符数组、c字符串的区别
1.字符数组可能没有尾0,不能直接当字符串用; 2.尾0要占用数组的一个单元,所以,数组必须有多余的单元; 3.如果没有多余的单元,就要重新产生一个较大一点的数组; 4.在字符数组有效字符后,加一个尾0 即 '\0\,就成了字符串;
posted on 2014-03-24 00:39 阅读( ...) 评论( ...)