数组和指针的区别
1.数组存储的区域要么是静态存储区,要么是栈。指针可以创建在任意的内存区域。
2.修改内容上的差别:
char a[]="hello";
a[0]='p';
char b*="hello";
b[0]='p'; //这里是错误的,因为指针指向的是常量字符串,不可被修改。
3.用运算符sizeof可以算出数组的长度,但是无法算出指针的。
char b[]="hello";
char a*=b;
cout << sizeof(b)<<endl;//12字节
cout << sizeof(a)<<endl;//4个字节,得到的是指针变量的字节数,不是字符串长度。
一道关于符号转换类型的问题
void test(void)
{
int a=10;
int b=-20;
(a+b>6)?puts(">6"):puts("<=6");
}
/* 这道歉考察了符号变量的问题。当表达式中有带符号变量和无符号变量时,
* 统一转换为无符号变量,因此-20(化为二进制,然后取反加一)转换为无符号数,会变得很大,因此a+b必大于6
*/
实现一个字符串的倒序:
void test(void)
{
char A[]="abcd";
int len;
len=strlen(A);
char* B=(char*)malloc(len+1); //strlen计算长度时没有算末尾0,需要为‘\0’添加一个位置
char* C=&A[len-1];
while(len--!=0)
B++=C--;
*B=0;//字符串尾部要加0
printf("data:%s",B);
free(B);
return 0;
}
#deifne length 10
/*一个有10个指针的数组,该指针是指向一个整型数*/
int* temp[lenght];
/*一个指向有10个整型数数组的指针*/
int (*temp)[length];
/*一个指向函数的指针,该函数有一个整型参数并返回一个整型数*/
int (*temp)(int); //指向函数,就要用括号括起来。
/* 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数*/
int (*temp[length])(int) //首先返回整型,所以后面需要(int),然后指针数组(*temp)[length],又指向函数,就->(*temp[length])
在第三方参数不参与的情况下,交换两个数的值
void tets(int a ,int b)
{
a=a+b; //
b=a-b; // b=(a+b)-b
a=a-b; // a=(a+b)-a
}