*char(**)与(char*)的区别
*char(**)与(char*)的区别,举例如下:
1、char *a = "hello" 中的a是指向第一个字符‘a'的一个指针
2、char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针
但二者并不相同:看实例:把两个字符串相加
显示结果:hello0123456789
对比:
显示结果:segmentation fault
把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常量区,是无法修的。而数组是存放在栈中,是可以修改的。两者区别如下:
1、 ”读“ ”写“ 能力
char *a = "abcd"; 此时"abcd"存放在常量区。通过指针只可以访问字符串常量,而不可以改变它
而char a[20] = "abcd"; 此时 "abcd"存放在栈。可以通过指针去访问和修改数组内容
2、赋值时刻
char *a = "abcd"; 是在编译时就确定了(因为为常量)
而char a[20] = "abcd"; 在运行时确定
3、 存取效率
char *a = "abcd"; 存于静态存储区。在栈上的数组比指针所指向字符串快。因此慢
而char a[20] = "abcd"; 存于栈上
其次,我们要明白一点,以为*p可指向以为数组,**p指向二维数组,***p指向三维数组......
最后()在不同的情况下有不同的含义。好现在开始讲解*char(**)与(char*)的区别
1、*char(**)应该表示一个指向二维数组的指针,其效果等同于一个三维数指针
2、(char*)我给出以下两种含义:
a、可定义一个字符型指针
b、将当前对象显示转换为字符指针类型
PS:希望对楼主有帮助。如有必要,希望楼主讲问题描述清楚,多放点代码进来,让我们知道这两句代码是在什么情况下的,因为往往不同环境下,相同代码有不同的含义。
void stringFree (void * elem) {
free( * char( **) elem);
}
这个函数是用c写的范型stack中的一个小函数,在此范型stack中要存储的数据的类型是字符串,* char( **)中前一个*是对后面括号里的一个*的解引用,所以它不是三维指针,不过我已经知道了,char(**)是对当前地址进行强转为指向二维数组的指针,然后前面的*进行解引用来得到这个指针的内容(即这个地址),这样通过free函数就可以释放其中的一个数据的内存了
*char (**p);这是你希望的例子吗?
这个形式是不正确的声明。
你能举个例子吗?说说你见过的这个类型是怎么声明的。
这是在用c语言实现范型时用到的
没见过你这种用法。不好意思。没有帮到你
广告 您可能关注的内容 |