主要内容:二维数组和指针。&*a[i][0]的理解、数组1[e]和e[1]

#include <stdio.h>

#define NUM_ROWS 10
#define NUM_COLS 10 int main(int argc, char **argv)
{
    int a[NUM_ROWS][NUM_COLS], *p, i = 0; // a理解为指向整数指针的指针 即int **
    int c, d=2,*test, e[2] = {4,5},f[2][2] = {{11,22},{33,44}}; // e理解为int *
    test = &d;
//    c = *&test; //和&(*test)结果一样,*和&同一优先级。按右到左
    c = &*test; // 注意和++*test的区别,这里有点不懂。为什&(*test)不出错。我
                // 感觉是*test等效于d。而不是详细的数值。然后&(*test)相当于&(d)
                // 所以才印证以下在指针操作时&和*可取消
//    c = ++*test;
    printf("1[e] = %d\n",1[e]); // 1[e] 和 e[1] 一样,由于对编译器而言e[1] 等价于*(e + 1)==>*(1 + e)
                                // 则等价于1[e] ,但良好编程习惯不要这样写
    printf(" c = %d\n",c);
    printf(" d的地址为 = %d\n",&d);
//    test = &*e[0];   // 这句出错(*&e[0]编译通过可是执行出错),指针才干够&和*取消,e[0]是常数,
                     //以下f[1] 表示第二行
//    printf(" 常数d = %d\n",*test);
    test = &*f[1];
    printf(" d = %d\n",*test);
    for(i = 0; i < NUM_ROWS; i++)
    {
        /* 使p指向二维数组的某一行用p = &a[i][0] 等价于p = a[i]
         * C语言中二维数组按行存储
         * 数组下标与指针算术运算间的奇妙公式
         * 对随意数组a。 a[i]等价于*(a+1) .
         * 由于&和*能够取消。则&a[i][0]等价于&(*(a[i]+0)) ==>等价于&*a[i] ==>a[i]
         */
        for(p = a[i]; p < a[i] + NUM_COLS; p++)
        {
            *p = i;
            printf("%3d ",*p);
        }
        printf("\n");
        
    }
    return 0;
}

输出:

程序员之--C语言细节13(二维数组和指针,&amp;*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)的更多相关文章

  1. 程序员之---C语言细节12(指针和数组细节,&quot;//&quot;的可移植性说明)

    主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[ ...

  2. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  3. 程序员之---C语言细节22(函数返回指针注意事项&lt;悬空指针&gt;、查看进程能够分配的内存大小)

    主要内容:函数返回指针注意事项<悬空指针>.查看进程能够分配的内存大小 #include <stdio.h> char * favorite_fruit() { static ...

  4. 程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)

    主要内容:由/* */ 引起的凝视错误 有4处凝视错误 #include <stdio.h> #define N 10 //使用以下宏定义的凝视 #define BSC // #defin ...

  5. 程序员之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)

    主要内容:无符号和有符号之间转换.两数相加溢出后数值计算 #include <stdio.h> /* 这个函数存在潜在漏洞 */ float sum_elements(float a[], ...

  6. 程序员之---C语言细节24(段错误、类型提升、sizeof &#39;A&#39;)

    主要内容:段错误.类型提升.sizeof  'A' #include <stdio.h> int main() { union test{ char a[10]; int b; }u; i ...

  7. 程序员之---C语言细节18(一些奇怪表达式)

    主要内容:一些奇怪表达式 #include <stdio.h> #define N 10 int main() { int a = 1; int *q = &a; int p = ...

  8. C# - VS2019 WinFrm程序调用ZXing.NET实现条码、二维码和带有Logo的二维码的识别

    前言 C# WinFrm程序调用ZXing.NET实现条码.二维码和带有Logo的二维码的识别. ZXing.NET导入 GitHub开源库 ZXing.NET开源库githib下载地址:https: ...

  9. C语言如何动态分配二维数组

    C语言如何动态分配二维数组(转载) 原文链接:https://www.cnblogs.com/0xWitch/p/9314621.html 使用malloc().free()函数进行动态分配,这两个函 ...

随机推荐

  1. pytorch 6 build_nn_quickly 快速搭建神经网络

    import torch import torch.nn.functional as F # replace following class code with an easy sequential ...

  2. java中的接口中的方法

    题目如下:(多选题)请选择以下接口定义正确的方法() A:public static void main (String[] args); B:private void test(); C:publi ...

  3. 2015 Multi-University Training Contest 4 hdu 5334 Virtual Participation

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  4. HDU——T The King’s Problem

    http://acm.hdu.edu.cn/showproblem.php?pid=3861 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  5. 主流框架(SSH及SSM)配置文件的模板头文件

    SSH三大框架整合配置头文件模板如下: 一:Spring配置文件(beans.xml)模板:<beans    xmlns="http://www.springframework.or ...

  6. [debug]重定义默认參数

    编敲代码过程中遇到重定义默认參数的错误,例如以下例所看到的: #include<iostream> #include<stdlib.h> using namespace std ...

  7. cocos2d_x_03_经常使用类的使用_事件_画图

    一.TextFieldTTF输入框的使用 #pragma mark - 自己定义方法 // 自己定义方法,加入一个 TextField void TextFieldScene::addOneTextF ...

  8. sql系列(基础篇)-第一章 关于sysdate

    第一章 主要的SQL语句  1. 查询数据库系统时间,常以server默认的格式进行显示(依据数据库的字符集而定): 注意:dual 为数据库中的虚表,隶属于管理员 sys 用户,但全部的用户都能够訪 ...

  9. UVA - 10229 Modular Fibonacci 矩阵快速幂

                                 Modular Fibonacci The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 3 ...

  10. 一题多解(一) —— list(Python)判空(以及 is 与 == 的区别)

    >> l = [] 1. == >> l == [] True 2. not >> not l True 3. 注意 is 与 == 的区别 >> l ...