第八章 数组 [C和指针]

关于数组和指针的一些小知识点:

// 数据名是指向数组第一个值的指针,存在两个例外,sizeof(a)返回的是数组a整个占用空间;&a返回一个指向数组的指针而非指向第一个数组元素的指针;

// 下表[ ]可以作用于指针;

// 指针表达式和下标表达式可以互换的使用,但是不同场合效率不同; 

// 指针和数组的区别在于分配内存空间、标量与否、初始指向;

// 所有传递给函数的参数都是传值方式进行的。数组名作为函数参数时,这种数组名参数的行为貌似是通过传址调用传址的,但实际上传递给函数的是一份该指针的拷贝,是通过传值方式传递的,调用程序所传递的实参并不受影响,因为只有传递给函数的那份拷贝进行了修改;

// 多维数组存储顺序是按照最右边的下表率先变化的原则;

// 多维数组初始化和作为函数参数的声明中,只有第1维可以写成指针的形式,第2个以及以后各维的长度需要声明,因为编译器需要知道各维长度进行求值。

    如 int matrix[ 3 ] [ 10];

          int  (*p) [10] = matrix;

    又如  int matrix[ 3 ] [ 10];

             void fun( int (*mat)[10] ); 或 void fun( int mat[ ][10] );

// 指针数组 char *p[ ] ,数组中的每个元素都是指向char型的指针

编程练习

/*8-2 个人所得税计算,数据存储原始数据*/
#include 
#include 
float single_tax(float *in);
static int money_limit[] ={0, 23350, 56550, 117950, 256500};
static float base_tax[] = {0, 3502.5, 12798.5, 31832.5, 81710.5};
static float ratio_tax[] = {0.15, 0.28, 0.31, 0.36, 39.6};
int main()
{
    float *income;
    float tax;
    printf("Please your Total Income:");
    scanf("%f",income);
    tax = single_tax(income);
    printf("total single tax = %f\n",tax);
    return 0;
}
float single_tax(float *in)
{
   int index;
   for( index = 0; *in >= money_limit[index]; index += 1)
               ;
   index -= 1;
   return (base_tax[index]+ (*in - money_limit[index])*ratio_tax[index]);
}


 

你可能感兴趣的:(《c和指针》阅读日记)