牛客随笔(1)

  一.结构体变量的声明方式:

(1)先声明结构体类型再定义变量

typedef struct { int red; int green; int blue; }color;
color c1;

 (2) 再声明类型的同时定义变量

struct color { int red; int green; int blue; }c1;

(3)直接定义结构体变量

struct { int red; int green; int blue; }c1;

注意:typedef指声明心得类型名(没有创造新的类型)

//
typedef int COUNT;
COUNT i, j;
//与下面的等价
int i, int j;
//
int a[10], b[10], c[10], d[10];
//可以改为
typedef int ARR[10];
ARR a, b, c, d;

注意:COUNT,ARR一般为大写;

二.关于去掉字符串中空格的方法

#include<iostream>
using namespace std;
int main()
{
    int i = 0; int j = 0;
    char a[] = "  How are you! ";
    cout << a << endl;
    for (i = 0; a[i]; i++)
    {
        if (a[i] != ' ')
            a[j++] = a[i];
        a[j] = '\0';

    }
    cout << a << endl;
}
 三.关于字符串指针
定义:括在一对双引号之内的字符序列或转义字符序列称为字符串常量。
例如:“How are you!” “a” “*abc\n\t”
它是不可以改变的.例如:
char *p="ni hao!";
如果你试图改变指针所指向的内容是会报错的.
例如:(*p)='h';//运行的话会报错
因为字符串常量是放在静态存储区的,这部分内容是不能修改的。
字符串变量:在c中是没有这个概念的,c中如果想将一个字符串存放到变量中,必须使用字符数组,就是用一个字符型数组存放一个字符串,例如:
char data[10]="china";这时候,这个字符数组存放了一个字符串,它是可以改变的,
例如:data[0]='m';这种操作都是可以的。
大概意思,就这些了,不清楚的可以hi我.
#include<iostream>
using namespace std;
int main()
{
    const char *s = "AAA";
    cout << s << endl;
    //s[0] = 'b';会报错因为不可修改
    
    return 0;
}

四.关于只增自减

自增自减只能用于变量,不能用于常量或表达式

例:5++,(a+b)++不合法,结合方向是“自右向左”

首先要反对说“++i先自加,i++后自加”的,两者的差异是返回值不同。
这道题涉及到++i和i++的概念,以及函数返回值能否作为左值。
以整形数据为例:
++i:
int pre_increment(int &a){ a=a+1; return a; }
函数返回的引用类型可以作为左值。 i
++int post_increment(int &a){ int temp=a; a=a+1; return temp; }
函数返回的一般类型不能作为左值。

五.关于abs返回值可为0,负数,正数的解释

 int abs(int num);

 num为0或正数时,函数返回num值; 

当num为负数且不是最小的负数时(不要问我最小的int类型负数是多少)
函数返回num的对应绝对值数,即将内存中该二进制位的符号位取反,并把后面数值位取反加一; 

当num为最小的负数时(即0x80000000),由于正数里int类型32位表示不了这个数的绝对值,所以依然返回该负数。 
#include<iostream>
using namespace std;
int main()
{
    int a = 0x80000000, b = 0x7fffffff;
    cout << a << endl;
    cout << abs(b) << endl << abs(a) << endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zhang1568234/p/9180534.html