char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?
在 Visual C++ 里面不能与 int **v 等同起来。
举个例子:
int **p;
int (*v)[10];
int a[10][10];
如果写 v = a 是可以的。
如果写 p = a 将会引起一个类型不匹配的编译错误。
二级指针(int **p)需要自己指向一个一级指针,而二维数组则
不是这样。编译器为了节省空间和时间,没有采用指针指向指针的方法,而是将数组现
行地存放在内存中。这样一来,int (*v)[10] 也就成了 C 语言的一种特殊语法,它只
能表示 v 指向第一维具有 10 个元素的二维数组的头部。这样 v 的类型与 a[10][10]
正好匹配,v 的类型与 b[5][10](比如说定义了 b)也是匹配的。但是 v 不能匹配
c[5][5] 因为 c 的内存分布中每隔 5 个元素就把第二维的下标加一。
可以这样写,呵呵……
- #include<stdio.h>
- #include<stdlib.h>
- int main()
- {
- //local declarations
- int **pointer;
- int count;
- int i;
- int *p;
- //statements
- pointer= (int **)malloc (sizeof(int *) *10);
- for( count=0; count < 10; count++ )
- pointer[count]=(int *)malloc(sizeof(int) * 10);
- for(count=0; count< 10; count++)
- {
- p=*(pointer+count);
- for(i=0; i<10; i++)
- *(p+i)=count;
- }//for
- for(count=0; count<10; count++)
- {
- for(i=0;i<10;i++)
- printf("%6d",*(*(pointer+count)+i));
- printf("\n");
- }//for
- return 0;
- }//main
复制代码
这样 pointer 也可以作为二维数组来使用,但是每两个下标相邻的元素在内存中的地址不一定
是相邻的,而且还有 10 个一维指针占用内存空间作为桥梁。
char **str1=NULL;
char *x="zhang";
str1=&x;
char **p, char a[16][8]; 问:p=a 是否会导致程序在以后出现问题?为什么?相关推荐
- const char * 和 char const * 和 char * const 区别
我们都用过const 修饰符修饰一个变量,而且我们知道使用const修饰之后,这个变量相当于常量了,他的值在代码其他部分不能再修改,这对于函数调用时候,防止错误的修改原本不应修改的变量起到很大作用,举 ...
- C++中string、char *、char[]的转换
C++中string.char *.char[]的转换 头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会.现在从网上找了点资料,看了看,知道点东西了. 一.string转char*. 主要 ...
- linux strcpy函数实现,strcpy(char *dest , char *src)的漏洞
前言:研究了几天DOS下的溢出原理,最后明白了其实原理都很简单关键是要懂得为什么C语言的strcpy函数有漏洞,为什么对这个函数的不正常使用会造成溢出. 一节:介绍strcpy函数能看到这篇文章的人可 ...
- char *与char []
由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个...下 ...
- const char*p,char const*p,char *const p
转自 http://blog.csdn.net/todd911/article/details/7911995 const char*, char const*, char*const的区别问题几乎是 ...
- c语言char aa 1000,char ** 与char * a[ ] 区别
先看 char *a [ ] ; 由于[ ] 的优先级高于* 所以a先和 [ ]结合,他还是一个数组,数组中的元素才是char * ,前面讲到char * 是一个变量,保存的地址.. 所以 char ...
- 深入理解char * ,char ** ,char a[ ] ,char *a[]
1.数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素. 2.指针 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址.由于地址也 ...
- EXCEL的换行符等,输入,替换,和 char(10) char(13)等
1 如何输入换行 不设置,输入 alt+enter ,单元格强制换行 设置为自动换行,输入较多内容,只会讲单元格扩充到一定场地,并不会自动根据内容换行 设置为自动换行, =""&a ...
- char与signed char, unsigned char的区别
一.开始 今天有一个困扰的问题,就是char与signed char, unsigned char这三者的区别. 二.三者之间 1.ANSI C 提供了3种字符类型,分别是char.signed ch ...
- C语言对于char*和char[]的理解
C语言对于char*和char[]的理解 1.char*和char[]的共同点 2.char*的用法 3.char[]的用法 4.怎么输出char*地址 5.strlen和sizeof 6.char* ...
最新文章
- 一卡顶四卡,清华推出工具包BMInf玩转百亿大模型
- mysql back blog_mysql的备份Xtrabackup
- LoadRunner Interview Questions
- 基于HiKariCP组件,分析连接池原理
- 统计学硕士考计算机博士,统计学国家重点学科博士点硕士点最全博研堂考研究生.pdf...
- 昆仑万维C++工程师笔试
- java语言的科学与艺术-编程练习10.4
- C++读取字符串中的数字的方法
- 五款可以取代 Slack 的开源工具
- Python基础灬函数补充(作用域,迭代器,生成器)
- java基础70 负责静态的网页制作语言XML(网页知识)
- hardmard积 用什么符号表示_[关于数学哲学的科普]为数学学习准备的基础数理逻辑(用自然推理系统展现的命题演算以及一阶谓词演算)...
- selenium + java po模式
- Centos上PostgreSQL9.3的安装
- 哪款scrm系统性价比更高?更受企业的欢迎?
- 关于概要设计文档的写作
- 微信openid你了解多少?appid,appsecert又是啥?
- jq追加html点击事件,jq增加点击事件 Jquery为DIV添加点击事件
- 音箱高音测试电脑软件,BOSE MusicMonitor电脑扬声器晒单 使用体验_什么值得买
- Python处理CSV文件(二)