数组与指针的恩怨

1、数组的本质

(1)、一种构造类型,(2)、相同类型的连续分配内存,(3)、数组的大小为sizeof(type)*array_size(模子type[ ]大小),(4)、数组名为数组的第一个元素的首地址 (5)、有时候可以当作指针常量

2、数组的地址VS数组名

数组的地址为&a,数组名为a,两者的指针运算也不一样,像&a+1,与a+1 是不同的

 

3、指针的本质

(1)、是一个变量(2)、是占用一定的内存空间(3)、用于保存内存地址的值(4)、可以通过*(钥匙)取得内容 (5)参数传递,丢失长度信息(6)、const左数右指

4、数组VS指针

数组:声明编译器自动分配一片连续的内存空间,数组名为指针常量,

指针:声明时表示只分配容纳4个字节空间的地址,指针为变量

5、字符串:

字符数组、字符串(以\0结束的字符数组)、

char a[]="aaaaa";分布在栈空间

char *a="aaaaa";分布在只读存储区

strlen求取字符串长度

strcpy与 strncpy表示无限制与有限制,表示拷贝

strcat与strncat表示无限制与有限制,表示连接

#include <stdio.h>
//#include <syslib.h>
#include <string.h>
main()
{
char d[]="Golden Global";  // 可以运行   堆空间
//char *d ="Golden Global";   // 不可以运行 只读存储区
char *s=" View WinIDE Library";
//clrscr();
strncpy(d,s,3);
printf("%s",d);
}

6、数组指针与指针数组

数组指针:本质是指针,类型为数组类型

typedef int(INT)[len];  //表示定义一个数组类型(也就是定义了一个模子)

INT a; //定义一个变量

INT * p;// 表示定义一个数组指针

等价于int (*p)[len]

#include<stdio.h>

int main()
{
 //数组指针
 int a[3]={1,2,3};
 int *p1=a;
 typedef int(AINT)[3];
 AINT *p2=&a;

 int b[2][2]={{1,2},{3,4}};
 typedef int(MATRIX)[2][2];
 MATRIX *p3=&b;

 int (*p4)[3]=&a;
 
 //指针数组
 char *c[10];
 c[0]="zhao";
 c[1]="chuang";
 printf("%s\n",c[0]);
 
 return  0;
}

 

指针数组:本质是数组,内容是字符串

char * aa[len]={"aa","aa","cc"}

#include <stdio.h>
#include <string.h>

int lookup_keyword(const char* key, const char* table[], const int size)
{
    int ret = -1;
   
    int i = 0;
   
    for(i=0; i<size; i++)
    {
        if( strcmp(key, table[i]) == 0 )
        {
            ret = i;
            break;
        }
    }
   
    return ret;
}

#define DIM(a) (sizeof(a)/sizeof(*a))  //深刻理解*a代表32为的内存地址

int main()
{
    const char* keyword[] = {
            "do",
            "for",
            "if",
            "register",
            "return",
            "switch",
            "while",
            "case",
            "static"
    };
    printf("%d\t%d\n",sizeof(keyword),sizeof(*keyword));
//keyword数组存放32为地址4个字节,*keyword表示第一个元素的指针(地址)
     printf("%s\n",*keyword);
    printf("%d\n", lookup_keyword("return", keyword, DIM(keyword)));
    printf("%d\n", lookup_keyword("main", keyword, DIM(keyword)));
}

7、main函数知道少

#include <stdio.h>
//argc 表示参数个数。argv表命令,env表示环境变量
int main(int argc, char* argv[], char* env[])
{
    int i = 0;
   
    printf("============== Begin argv ==============\n");
   
    for(i=0; i<argc; i++)
    {
        printf("%s\n", argv[i]);
    }
   
    printf("============== End argv ==============\n");
   
    printf("\n");
    printf("\n");
    printf("\n");
   
    printf("============== Begin env ==============\n");
   
    for(i=0; env[i]!=NULL; i++)
    {
        printf("%s\n", env[i]);
    }
   
    printf("============== End env ==============\n");
}

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

path.join 和 path.resolve的区别

path.join path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起&#xff0c;并规范化生成的路径。 path.join([...paths]);...paths string类型 path.join(__dirname, ./02art-template.js); // C:\Users\liangliang17\Desktop\Node_study\Node\5.path\02…

[转载]如何将Putty生成的PrivateKey转换为SecureCRT所需的PublicKey

为什么80%的码农都做不了架构师&#xff1f;>>> 首先说明&#xff0c;标题不一定准确&#xff0c;因为盆地并未详细了解清楚这里的公钥、私钥机制&#xff0c;只是根据以前的印象有个大概的理解&#xff0c;且最终以解决问题为主要目的&#xff0c;并未深究。标题的…

Linux c 算法与数据结构--双向链表

链表是linux c中非常重要的数据结构&#xff0c;双向链表与单向链表的区别&#xff0c;是它每个节点有两个指针域&#xff0c;分别指向该节点的前一个节点与后一个节点&#xff1b; 而链表的操作主要是查询、插入、删除、遍历等&#xff0c;下面来看一个双向链表&#xff0c;主…

执行shell出现bad interpreter

执行shell出现bad interpreter:No such file or directory linux执行shell出现bad interpreter:No such file or directory的原因是文件格式的问题。这个文件是在Windows下编写的。换行的方式与Unix不一样&#xff0c;但是在VI下面如果不Set一下又完全看不出来。 解决方法&…

exports、module.exports和export、export default到底是咋回事

前言 难得有空&#xff0c;今天开始重新规范的学习一下node编程。 但是引入模块我看到用 require的方式&#xff0c;再联想到咱们的ES6各种export 、export default。 阿西吧&#xff0c;头都大了.... 头大完了&#xff0c;那我们坐下先理理他们的使用范围。 require: node …

linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务

2019独角兽企业重金招聘Python工程师标准>>> 两台服务器111&#xff0c;和117服务器,每天完成111服务器上网站和数据库自动备份到117服务器上 1&#xff1a;我的111服务器上是当前用户&#xff1a;sx A: 查看当前用户的计划任务&#xff1a;crontab -l是查看当前…

自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法...

前言&#xff1a;这几天做客户回访&#xff0c;感触很大&#xff0c;用户只要是留反馈信息&#xff0c;总是一种恨铁不成钢的心态&#xff0c;想用你的app&#xff0c;却是因为你的技术问题&#xff0c;让他们不得不放弃&#xff0c;而你一个回访电话却让他们尽释前嫌&#xff…

Linux c 算法与数据结构--栈

前段时间写了双向链表&#xff0c;现在写个栈&#xff0c;写之前&#xff0c;先简单介绍链表 队列  栈的区别&#xff1a; 链表&#xff0c;队列&#xff0c;堆栈的区别 1、栈是个有底的口袋&#xff0c;像袜子。 队列是没底的口袋&#xff0c;像通心粉。 所以&#xff1a;栈…

关于sass(scss)、less、postcss、stylus等的用法与区别

一. Sass/Scss、Less、stylus是什么? 它们都是css预处理器。css预处理器的概念&#xff1a;CSS预处理器用一种专门的编程语言&#xff0c;进行Web页面样式设计&#xff0c;然后再编译成正常的CSS文件&#xff0c;以供项目使用。CSS预处理器为CSS增加一些编程的特性&#xff0…

计算机点滴

CD&#xff0c;VCD&#xff0c;DVD的区别CD:纯音乐 VCD&#xff1a;影视初级光盘 DVD&#xff1a;高清晰影视光盘 EVD&#xff1a;高清晰数码影视 MPEG4&#xff1a;压缩高密影视光盘 MP3&#xff1a;压缩纯音乐1.容量大小不同&#xff1a;DVD可以装更多的内容。CD与DVD差别在于…

Linux C 算法与数据结构 --二叉树

头文件BiTree.h [cpp] view plaincopy typedef int Item; typedef struct node { struct node * lchild; struct node * rchild; Item data; }BiTNode,*BiTree; /*构造一棵新的二叉树*/ BiTree InitBiTree(BiTNode *root); /*生成节点*/ …

Spring 实现数据库读写分离

Spring 实现数据库读写分离 现在大型的电子商务系统&#xff0c;在数据库层面大都采用读写分离技术&#xff0c;就是一个Master数据库&#xff0c;多个Slave数据库。Master库负责数据更新和实时数据查询&#xff0c;Slave库当然负责非实时数据查询。因为在实际的应用中&#xf…

vue 3.x 中使用ele-image时相对路径的图片加载失败

参考文档&#xff1a; https://element.eleme.cn/#/zh-CN/component/installation 环境: Mac OS X 10.12 [zcmele 2]$node -v v12.6.0 [zcmele 3]$npm -v 6.9.0 [zcmele 4]$cnpm -v cnpm6.1.0 (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js) npm6.10.2 (/usr/local/li…

JavaScript函数绑定

一个简单的函数绑定 在JavaScript与DOM交互中经常需要使用函数绑定&#xff0c;定义一个函数然后将其绑定到特定DOM元素或集合的某个事件触发程序上&#xff0c;绑定函数经常和回调函数及事件处理程序一起使用&#xff0c;以便把函数作为变量传递的同时保留代码执行环境。 <…

ie6兼容问题汇总

这几天在查找和解决网页在ie6下的兼容性问题花了我不少的时间&#xff0c;参考了网上的一些解决方法和自己做出来比较有效果的给大家参考一下&#xff0c;也方便我日后再用到&#xff1a; 1.IE的cache设置为Every visit to the page&#xff0c;而不是默认的Automatically。基本…

Linux C 数据结构---线性表

数据结构指的是数据元素及数据元素之间的相互关系&#xff0c;包含下面三方面的内容&#xff1a; 其中&#xff0c;线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系&#xff0c;即除了第一个和最后一个数据元素之外&#xff0c;其…

Postman发送请求时带上登录信息

正常情况下&#xff0c;没有登录验证等公共接口&#xff0c;用postman进行get或post请求都很方便&#xff0c;加上相应的参数就行。 但是对于某些接口&#xff0c;可能需要先登录后才能请求&#xff0c;这时如果按正常的思路请求&#xff0c;可能就会被拦截了。 对于这种情况…

Chrome跨域问题

2019独角兽企业重金招聘Python工程师标准>>> 在chrome图标&#xff0c;右键--->属性 --->目标 路径末尾添加 “--disable-web-security” 重启即可 转载于:https://my.oschina.net/u/861562/blog/152171

解决安装mysql的”A Windows service with the name MySQL already exists.“问题

如果以前安装过mysql&#xff0c;卸载重装&#xff0c;很可能会碰到”A Windows service with the name MySQL already exists.“这样的提示。即服务已经存在。我们可以在window任务管理器----服务中查看&#xff0c;发现确实存在&#xff0c;没有卸载干净。 解决这个问题&…

[vue] 父子组件间传值

环境说明: vue 3.x ant-vue 父组件(Album.vue)使用: <template><div><a-button type"primary" icon"plus" click"uploadImage">图片</a-button><upload-image :visible.sync"visible"></upload-i…