2 qq 33515515 qq_33515515 于 2016.02.15 11:13 提问

C语言中二级指针修改数组问题。

数组相当于一级指针,我写了一个二级指针被调用。
结果它总是宕机,求指导,谢谢。图片

3个回答

wangzhiyu1980
wangzhiyu1980   2016.02.15 14:47
已采纳

这段程序编译会报错吧:
cannot convert parameter 1 from 'char (*)[100]' to 'char **'

可以这样 试试看
#include
#include
#include

int getMemBuf(char*& p2)
{
char* tmp = NULL;
tmp = (char*)malloc(100);
strcpy(tmp, "aaabbbccc");

p2 = tmp;
return 0;

}

void main()
{
int i = 0;
char* buf;
getMemBuf(buf);

printf("%s\n", buf);

free (buf);
system("pause");

}

qq_33515515
qq_33515515 你这个就是二级指针改一级指针了,谢谢你。
2 年多之前 回复
wangzhiyu1980
wangzhiyu1980 下面的也改一下 *p2 = tmp; getMemBuf(&buf);
2 年多之前 回复
wangzhiyu1980
wangzhiyu1980 回复Mage??? : 我在VC下试了是可以的,当然也可把int getMemBuf(char*& p2) 改成int getMemBuf(char** p2)
2 年多之前 回复
wangzhiyu1980
wangzhiyu1980 回复Mage??? : 我在VC下试了是可以的,当然也可把int getMemBuf(char*& p2) 改成int getMemBuf(char** p2)
2 年多之前 回复
wangzhiyu1980
wangzhiyu1980 回复Mage??? : 我在VC下试了是可以的,当然也可把int getMemBuf(char*& p2) 改成int getMemBuf(char** p2)
2 年多之前 回复
qq_33515515
qq_33515515 char *& p2编译不能通过。
2 年多之前 回复
91program
91program   Ds   Rxr 2016.02.15 11:17

数组确实是相当于一级指针,但是是常量指针,其值不能被修改。
任何试图修改数组名的操作,会引起程序严重异常。

fk002008
fk002008   2016.02.15 11:29

数组名仅仅是“相当”于指针,而并非真的是指针,只是个常量(一个值为数组首元素地址的常量),所以不能进行++或者--运算。
而常量更是无法取地址的, 你使用的给数组名取地址它代表了数组本身,可不是简单的二级指针

qq_33515515
qq_33515515 回复lambda-fk: 谢谢。
2 年多之前 回复
fk002008
fk002008 不是那意思,你如果对数组名取地址,比如int a[3] ,&a是数组本身的地址,和普通变量的地址类似,&a的值是a[0]的地址,但是你如果使用&a+1,这个地址可不是数组第一个元素的,而是数组所在内存块的末尾的下一个地址(将数组看成一个整体变量),所以你用 &数组名去操作数组内部的东西是不可能的,只能使用数组名a 移动来访问更改数组内元素的值
2 年多之前 回复
qq_33515515
qq_33515515 那数组就是不能通过被调用函数修改了对吧?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于C语言中的数组指针、指针数组以及二级指针
概念解释数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关。 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称,即每个元素都是指针。 二级指针 : 如果一个指针指
C语言中的指针以及二级指针
很多初学者都对C中的指针很迷糊,希望这篇blog能帮助到大家: 1.什么是“指针”: 在执行C程序的时候,由于我们的数据是存储在内存中的。所以对于C程序本身来说,如果想找到相应被调用的数据,就要知道存储该数据的内存地址是多少,换言之,C程序通过已知的内存地址到相应的内存位置存储数据。 这里简单说一下内存管理(对于初学者来说。为了避免专业术语引发的理解问题,下面的叙述尽量避免专业定义:),对于
关于C语言中二级指针的理解
二级指针早在学校的时候就学习过并且略加研究过,但总觉得就是自己理解的那么一回事吧,而且感觉也确实不是一定要用它。但是今天在研究平衡二叉树的时候发现别人写的代码里面用到了二级指针,自己感觉不是很理解,认为这用一级指针也可以解决啊,事实是不是这样呢?未必,先看一道面试题: 题目是这样的: 代码如下: #include "stdafx.h" #include using namespac
C语言中二级指针使用
C/C++中使用指针可以减少函数传递的参数 例如:typedef struct { int r[MAX]; int length; }SqList;调用void test(SqList s)函数时,会把结构体SqList拷贝一份传入函数,这样就使得效率变低。 使用指针可以传递结构体,或者数组二维指针主要用在在子函数中有新生成的变量需要回传回主函数。void main() {
98 C语言二级指针(指向指针的指针)
C学习网:链接->C学习网 C训练网:链接->C训练网 指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向
C语言中的二级指针(双指针)
原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7220688C语言更多查看C语言使用注意事项(一)C语言使用注意事项(二)C语言使用注意事项(三)二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。下面讲解C中的二级指针的使用方法。例如我们使用指针来交换两
C语言二级指针的三种模型
第一种内存模型: #include #include #include void sortMyArray(char **myArray,int num){ int i =0,j=0; char *tmp; //排序 for(i=0;i<num;i++){ for(j=i;j<num;j++){ if(strcmp(myArray[i],myArray[j])>0){
c语言中的二级指针做函数参数
1.用指针做函数参数申请动态内存的问题 //如果函数参数是指针,不能用一级指针做函数参数实现申请动态内存 void getMemory(char *p, int num) { p = (char *)malloc(sizeof(char)*num); } void main() { char *str = NULL; getMemory(str, 20); strcpy(str, &quot;c...
C语言二级指针做函数参数改变该指针的指向
一、测试代码如下: //C语言二级指针做函数参数改变该指针的指向 #include void change_pointer(char **pp) { char *str="the pointer has been changed! \n"; *pp=str; } int main(int argc, char **argv) { char *p=NULL;
真正明白C语言二级指针
<br />    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是....<br /> <br />                                      p    *p   **p<br />                                      ---  ---  ----<br />