嵌入式之经典知识点(四)

数组和指针的区别

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
}

猜你喜欢

转载自blog.csdn.net/weixin_40288381/article/details/81086367